我正在尝试在节点REPL
中编写一个简单的代码,但遇到了一些困难:
一次输入一行命令一切正常,
但用括号块{ ... code ... }
包裹它时
(并在每一行之后点击进入)我在收到一个(}
)后收到错误。
正如您在我添加的图像中看到的那样 - 执行相同的代码,一次一行,工作正常。
答案 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)