2016-07-06 59 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