我是一个rails / php开发并且正在学习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分钟来弄清楚为什么close事件没有执行。
我是这种语言的新手,有人可以解释原因吗?
答案 0 :(得分:3)
rl.close
是对函数的有效引用。根据Javascript语言规范,它不是任何类型的实际Javascript错误。
如果您没有分配或传递给某些东西,那么事实证明不会做任何事情,所以一些Lint程序会将其标记为警告,但从技术上讲它不是Javascript错误。
例如,jsHint(Javascript的Lint程序)会给你这个警告:
期望一个赋值或函数调用,而是看到一个表达式。
由于Javascript语言在允许您编写的内容和解析内容方面相当宽松,因此通常建议您通过lint程序运行代码并修复或理解您在那里看到的每个警告。这通常会为您节省大量时间。