JavaScript中“return”语句的奇怪行为

时间:2011-10-11 08:51:06

标签: javascript

我对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中有更多这样的陷阱吗?

4 个答案:

答案 0 :(得分:9)

如果您将括号放到下一行,则解释器会假定存在分号。

所以你的return语句将被解释为:

return; 
{
   printTest: function() { window.alert(message); };
}

如果我记得很清楚,我会在 JavaScript:好的部分

中解决这个问题。

A.3。分号插入

  

JavaScript有一种机制,试图通过自动插入分号来纠正错误的程序。做   不依赖于此。它可以掩盖更严重的错误。   它有时会在不受欢迎的地方插入分号。考虑一下后果   返回语句中的分号插入。如果return语句返回一个值,那个值表达式   必须与回程在同一行开始:

return
{
   status: true
};
  

这似乎返回包含状态成员的对象。不幸的是,分号插入转为它   到一个返回undefined的语句。没有任何警告说分号插入导致了   误解了该计划。如果 {位于上一行的末尾,则可以避免此问题   而不是在下一行的开头:

return {
   status: true
};

“JavaScript:Douglas Crockford撰写的好文章。版权所有2008 Yahoo! Inc., 978-0-596-51774-8“。

答案 1 :(得分:3)

  

JavaScript中有更多这样的陷阱吗?

这让我微笑:)哦,男孩,你正在享受一种享受。

请查看此网站,例如:http://wtfjs.com/

答案 2 :(得分:1)

是的,这是一个区别。我认为它是文档的一部分,要返回的主题必须与return语句在同一行。 因为分号是可选的,表达式被解释为

return;
{
 ....
}

答案 3 :(得分:1)

JavaScript会自动进行分号插入。如果将括号放在return之后的下一行,则解释器会在return之后自动插入一个分号,结束语句。