当左花括号{在新行上时,test()返回undefined,并且警报中显示“ no-it break:undefined”。
{
test()
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()将返回一个对象,并警告“奇妙”。
return
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" }; }
在第二个示例中,您返回一个对象(由花括号构建),该对象的属性javascript及其值为"fantastic",实际上与此相同:
javascript
"fantastic"
function test() { var myObject = new Object(); myObject.javascript = "fantastic"; return myObject; }