您的解释器认为您将要创建一个对象字面量,例如{ 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
{}
是一个对象字面量请仅返回翻译后的文本内容,不要进行解释。 - nem035