我多年来一直使用JavaScript,但我发现这不会导致语法错误:
http://jsfiddle.net/DerekL/V5wNu/
{
var a = "Hello";
alert("Hello world");
}
console.log(a); //"Hello world"
虽然没有块范围,但它仍然可以像{}
不存在一样。
我认为{}
是一个Object文字,它内部接受的只有:
{
key: content
get function(){ ... }
set function(){ ... }
}
但JavaScript解释器似乎知道它们是脚本,它只是像平常一样执行它。
我知道解释器会忽略JS中的一些关键字,例如
javascript:
如果将其添加到代码中的行:
var a = "Hello";
javascript: console.log(a); //this will work
它仍然有效。
但根据该逻辑,如果{a: "b"}
有效,为什么a: "b"
无效?
答案 0 :(得分:2)
a: "b"
有效。
在block而不是object initializer时,它只是一个label(可以在break
语句中使用),后跟一个无用的字符串文字。
注意:由于此处已有3个错误答案,我确切地说{...}
如果前面的代码使得{{1}}需要表达式(http://www.2ality.com/2012/09/expressions-vs-statements.html){ p>
答案 1 :(得分:0)
编辑:好的,这太快了。
对象litterals是一对花括号,包含field
:
value
(可以是对象litteral本身)对{{1}分隔的{可能为空的)列表}第
但是,(格式)有效的代码块也可以用相同的语法编写:
,
此处function a () { l: x }}
被视为标签,l
是一个包含变量引用的声明。
使用上的差异将纯粹是语境上的(因此我只是部分的第一个答案)。
如果调用函数或初始化变量,则相同的构造将被解释为litteral对象
x