Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点';s REPL不';t识别块代码_Javascript_Node.js - Fatal编程技术网

Javascript 节点';s REPL不';t识别块代码

Javascript 节点';s REPL不';t识别块代码,javascript,node.js,Javascript,Node.js,我试图在node的REPL中编写一个简单的代码,但遇到了一些困难: 每次键入一行命令时,一切正常, 但是当用括号块将其包装时,{…code…} (并在每一行后按enter键)在结束一行(})后我得到一个错误 正如您在我添加的图像中所看到的,执行相同的代码,一次执行一行,效果很好。您的解释器认为您将创建一个对象文本,如{var:x}{var x;}不是一个好的对象语法,因为在标识符var之后应该有一个冒号,而不是x。因此,SyntaxError 您可以通过在任何提示前加上它实际上是一个代码块,强

我试图在node的
REPL
中编写一个简单的代码,但遇到了一些困难:

每次键入一行命令时,一切正常,
但是当用括号块将其包装时,
{…code…}

(并在每一行后按enter键)在结束一行(
}
)后我得到一个错误


正如您在我添加的图像中所看到的,执行相同的代码,一次执行一行,效果很好。

您的解释器认为您将创建一个对象文本,如
{var:x}
{var x;}
不是一个好的对象语法,因为在标识符
var
之后应该有一个冒号,而不是
x
。因此,
SyntaxError

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

label: { var x; }

if (true) { var x; }

do { var x; } while (false);
编辑:另外,请注意,没有很好的理由这样做。如果您没有将代码块用作流控制语句的语句组,或者用作标签的目标,那么它是完全无用的(正如您所发现的,它是难以跟踪的bug的潜在来源)

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

{
  var x1;
};
x1; // undefined

(function() {
  var x2;
})();
x2; // Uncaught ReferenceError: x is not defined
明白了,
我应该添加一个
在括号后

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


提示:
{}
是一个对象literalnode v5甚至不会关闭块,因此旧版本更接近!你为什么要这么做?我怀疑有一个很好的理由解释为什么REPL不会执行像那样的任意代码块,谢谢@nem,但我想写一个代码块(通过REPL不在一行中测试js)。@MattStyles-不知道节点v5(但如果时间允许,会研究它),原因写在上面,幸运的是,我们可以做到:)额外/结束分号也适用于节点v5!多行!我通常只执行一个小文件,但我可以看出多行是多么有用。这在节点10.9之后就不起作用了。看见