javascript – 为什么结果因花括号放置而异?

为什么从this article开始的下面的代码片段产生不同的结果,因为花括号的位置只有一个变化?

当开始大括号{在新行上时,test()返回undefined,并且警报中显示“no – it broke:undefined”.

function test()
{
  return
  { /* <--- curly brace on new line */
    javascript: "fantastic"
  };
}

var r = test();
try {
  alert(r.javascript); // does this work...?
} catch (e) {
  alert('no - it broke: ' + typeof r);
}

当大括号与return返回同一行时,test()返回一个对象,并提醒“神奇”.

function test()
{
  return { /* <---- curly brace on same line */
    javascript: "fantastic"
  };
}

var r = test();
try {
  alert(r.javascript); // does this work...?
} catch (e) {
  alert('no - it broke: ' + typeof r);
}

解决方法:

这是JavaScript的一个陷阱:自动分号插入.不以分号结尾但可能是语句结尾的行会自动终止,因此您的第一个示例看起来像这样:

function test()
{
  return; // <- notice the inserted semicolon
  { 
    javascript: "fantastic"
  };
}

另请参阅Douglas Crockford’s JS style guide,其中提到了分号插入.

在第二个示例中,您返回一个对象(由花括号构建),其属性为javascript,其值为“fantastic”,实际上与此相同:

function test() {
    var myObject = new Object();
    myObject.javascript = "fantastic";
    return myObject;
}
上一篇:Linux环境变量名中允许的字符


下一篇:矩阵的f范数及其求偏导法则