javascript没有块级作用域,但可以用{}来分割代码,
如
function say() { {
var a = 1;
}{
//anotherCodeBlock
}
alert(a);
}
say(); // 仍然输出1
当用eval解析时,{}会被理解为一个代码块的开始,不会理解成为一个对象字面量。
加()是为了迫使eval函数在评估JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。
JSON格式的名字部分为什么要加引号?
因为eval函数会将{foo:”bar”}解释成合法的JavaScript语句,而非表达式。
但是人们往往想要的是让eval将这段代码解释成一个对象。所以JSON格式会强制你去在名字的外侧加上引号再结合圆括号,这样eval就不会错误的将JSON解释成代码块。
举例说明:
alert(eval('{foo:"bar"}')); // return "bar"
alert(eval('({"foo": "bar"})')); // return JSON object
alert(eval("{}"); // return undefined
alert(eval("({})");// return object[Object]
alert(eval("({})");// return object[Object]