【问题标题】:Strange behavior of 'return' statement in JavaScript [duplicate]JavaScript中'return'语句的奇怪行为[重复]
【发布时间】:2011-10-11 08:51:05
【问题描述】:

我对 JavaScript 很陌生,刚刚开始了一些更严肃的 JavaScript 开发。我在实现模块模式时获得了很多乐趣。真正让我发疯的一件事是“return”声明的行为。写出来差别很大

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 确实在代码的后面位置报告了一些晦涩的语法错误:“printTest: function()”中的“function”语句之后的左大括号。

有这方面的专家吗? JavaScript 中是否还有更多这样的陷阱?

【问题讨论】:

  • 尽管您的示例都不起作用,因为您在要返回的对象的属性枚举中有一个分号。它应该在警报之后,而不是在花括号之后。
  • @PatrikAkerstrand:谢谢,已更正。

标签: javascript


【解决方案1】:

如果你把括号放在下一行,解释器会假设有一个分号。

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

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

如果我没记错的话,我在 JavaScript: The Good Parts

中对这个问题很感兴趣

A.3。分号插入

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

return
{
   status: true
};

这似乎返回了一个包含状态成员的对象。不幸的是,分号插入变成了它 进入返回未定义的语句。没有警告分号插入导致 对节目的误解。如果将 { 放在上一行的末尾,则可以避免该问题 而不是在下一行的开头:

return {
   status: true
};

"JavaScript: The Good Parts by Douglas Crockford。版权所有 2008 Yahoo! Inc., 978-0-596-51774-8。”

【讨论】:

  • +1 出色的明确答案!正如 Crockford 还指出的,这应该回答古老的花括号 style 讨论:如果一个人 想要打破风格-uniformity,那么开花括号 always 出现在语句之后(在同一行上),not 在(下一个)空行上。
【解决方案2】:

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

这让我笑了 :) 哦,男孩,你要请客了。

看看这个网站,例如:http://wtfjs.com/

【讨论】:

  • 酷,感谢分享... :-)
【解决方案3】:

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

return;
{
 ....
}

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-25
      • 2013-12-12
      • 2015-01-12
      • 2017-12-24
      • 1970-01-01
      • 2012-07-10
      • 2013-07-16
      相关资源
      最近更新 更多