缺少括号时,NodeJS不会给出错误通知

时间:2016-07-06 01:39:30

标签: node.js

我是一个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事件没有执行。

我是这种语言的新手,有人可以解释原因吗?

1 个答案:

答案 0 :(得分:3)

rl.close是对函数的有效引用。根据Javascript语言规范,它不是任何类型的实际Javascript错误。

如果您没有分配或传递给某些东西,那么事实证明不会做任何事情,所以一些Lint程序会将其标记为警告,但从技术上讲它不是Javascript错误。

例如,jsHint(Javascript的Lint程序)会给你这个警告:

  

期望一个赋值或函数调用,而是看到一个表达式。

由于Javascript语言在允许您编写的内容和解析内容方面相当宽松,因此通常建议您通过lint程序运行代码并修复或理解您在那里看到的每个警告。这通常会为您节省大量时间。