2016-07-06 56 views
0

Im a rails/php開發和當前正在學習nodejs,我只是有點困惑,他們不會提供語法錯誤或警告,只要你輸錯東西。當缺少括號時,NodeJS不會給出錯誤通知

例如:

var readline = require('readline'); 
var rl = readline.createInterface(process.stdin, process.stdout); 
var ar = []; 
var nm = ''; 

rl.question("What is your name? ", function(name){ 
    nm = name; 

    rl.setPrompt(`words? `); 
    rl.prompt(); 
    rl.on('line', function(str){ 

    ar.push(str.trim()); 

    if(str.toLowerCase().trim() == 'exit'){ 
     rl.close(); // <--- I forgot to add '()' on this line but the program still runs, no warnings at all. 
    }else{ 
     rl.setPrompt(`add more ('exit' to leave)`); 
     rl.prompt(); 
    } 

    }); 
}); 

// Because I forgot '()' this event did not execute ' 
rl.on('close', function(){ 
    console.log(name " " + ar); 
    process.exit(); 
}); 

在其他語言中,它通常表示該線路上的錯誤,但在那裏的NodeJS是沒有和我花了5分鐘,找出原因關閉事件不執行。

我不熟悉這種語言,有人可以解釋爲什麼嗎?

+0

'在其他語言中,它通常會在該行上表示錯誤,這取決於您正在使用的編輯器......如果使用記事本,則不會:)在Node的情況下, VS代碼與JSHint安裝_will_運行一些檢查你的代碼 –

+0

即時通訊使用原子..它不說什麼.. – XDProgrammer

+2

因爲原子是一個文本編輯器。看看https://atom.io/packages/atom-jshint –

回答

3

rl.close是對函數的有效引用。根據Javascript語言規範,這不是任何實際的Javascript錯誤。

事實證明,如果你不分配或傳遞給某些東西,所以一些Lint程序會將其標記爲警告,但它在技術上並不是JavaScript錯誤。

例如,jsHint(Javascript的棉絨程序)會給你這樣的警告:

預計轉讓或函數調用,而是看到了一個表達。

由於JavaScript語言是什麼讓你寫什麼它將解析相當寬容的,一般建議您通過皮棉程序運行你的代碼並修復或瞭解每一個警告你看那裏。這通常會爲你節省很多時間。

+0

我明白了,但不是那件壞事?如果你有幾百行代碼,那麼很難找到導致問題的原因,我只是控制檯,有沒有我可以用來給我的警告的程序? – XDProgrammer

+0

@XDProgrammer JSHint是一個 –

+0

@XDProgrammer - 我不會爭論什麼是或不是壞事(這非常純粹的意見)。語言就是這樣,我們不能改變它。如果你打算編程,那麼學會使用適當的工具來減少你的風險。我已經包含了使用[jsHint](http://jshint.com/)的建議,儘管有許多類似的工具可供選擇,並且也有一些內置於編輯器中。 – jfriend00