节点的REPL无法识别块代码

时间:2016-01-19 08:29:54

标签: javascript node.js

我正在尝试在节点REPL中编写一个简单的代码,但遇到了一些困难:

一次输入一行命令一切正常,
但用括号块{ ... code ... }包裹它时 (并在每一行之后点击进入)我在收到一个(})后收到错误。

enter image description here

正如您在我添加的图像中看到的那样 - 执行相同的代码,一次一行,工作正常。

2 个答案:

答案 0 :(得分:2)

你的口译员认为你会像{ var: x }那样制作一个对象文字。 { var x; }不是一个好的对象语法,因为在标识符var之后应该有一个冒号,而不是x。因此,SyntaxError

你可以强制解析器认为它是一个代码块,通过在它之前添加任何提示它实际上是一个代码块:

label: { var x; }

if (true) { var x; }

do { var x; } while (false);

编辑:另外,请注意没有充分的理由这样做。如果您没有将代码块用作流控制语句的语句组,或者作为标签的目标,则它完全没用(并且正如您所发现的那样是潜在的难以跟踪的错误源)。

在其他语言中,您可能正在控制变量的范围(我希望您确保在块外部看不到x?)。在JavaScript中,只有函数具有范围。因此,要将变量与周围环境隔离,您需要一个函数:

{
  var x1;
};
x1; // undefined

(function() {
  var x2;
})();
x2; // Uncaught ReferenceError: x is not defined

答案 1 :(得分:1)

知道了,
我应该在括号后添加;

这是现在运行代码的结果:

enter image description here