我对JavaScript很陌生,刚开始使用JavaScript进行更严肃的开发。我有很多乐趣来实现Module模式。真正让我发疯的一件事是“回归”陈述的行为。如果你写
,这是一个很大的不同Test = ( function()
{
var message = "Hello World!";
return
{
// Does not work
printTest: function() { window.alert(message); }
};
}());
或
Test = ( function()
{
var message = "Hello World!";
return {
// Works well
printTest: function() { window.alert(message); }
};
}());
请注意'return'语句后的大括号。
这是一个典型的愚蠢新手错误并在某处有详细记录吗?
Firebug无法提示。 IE9和Chrome确实在代码中的后续位置报告了一些模糊的语法错误:“function
”中“printTest: function()
”语句后的左括号。
对此有何评论? JavaScript中有更多这样的陷阱吗?
答案 0 :(得分:9)
如果您将括号放到下一行,则解释器会假定存在分号。
所以你的return语句将被解释为:
return;
{
printTest: function() { window.alert(message); };
}
如果我记得很清楚,我会在 JavaScript:好的部分
中解决这个问题。JavaScript有一种机制,试图通过自动插入分号来纠正错误的程序。做 不依赖于此。它可以掩盖更严重的错误。 它有时会在不受欢迎的地方插入分号。考虑一下后果 返回语句中的分号插入。如果return语句返回一个值,那个值表达式 必须与回程在同一行开始:
return
{
status: true
};
这似乎返回包含状态成员的对象。不幸的是,分号插入转为它 到一个返回undefined的语句。没有任何警告说分号插入导致了 误解了该计划。如果 {位于上一行的末尾,则可以避免此问题 而不是在下一行的开头:
return {
status: true
};
“JavaScript:Douglas Crockford撰写的好文章。版权所有2008 Yahoo! Inc., 978-0-596-51774-8“。
答案 1 :(得分:3)
答案 2 :(得分:1)
是的,这是一个区别。我认为它是文档的一部分,要返回的主题必须与return语句在同一行。 因为分号是可选的,表达式被解释为
return;
{
....
}
答案 3 :(得分:1)
JavaScript会自动进行分号插入。如果将括号放在return
之后的下一行,则解释器会在return
之后自动插入一个分号,结束语句。