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