小编典典

为什么结果根据花括号的位置而有所不同?

javascript

当左花括号{在新行上时,test()返回undefined,并且警报中显示“ no-it break: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);

}

当花括号与处于同一行时returntest()将返回一个对象,并警告“奇妙”。

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);

}

阅读 303

收藏
2020-04-25

共1个答案

小编典典

这是JavaScript的陷阱之一:自动分号插入。不以分号结尾但可能是语句结尾的行会自动终止,因此您的第一个示例实际上是这样的:

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

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

function test() {
    var myObject = new Object();
    myObject.javascript = "fantastic";
    return myObject;
}
2020-04-25