【问题标题】:Is there any reason to wrap anonymous JavaScript functions in braces?是否有任何理由将匿名 JavaScript 函数包装在大括号中?
【发布时间】:2011-01-09 10:02:00
【问题描述】:
var a = function () {
    return 'test';
}();

console.log(a);

第一种情况的答案:测试

var a = (function () {
    return 'test';
})();

console.log(a);

第二种情况的答案:测试

我正在使用第一种方法来创建自执行函数。但是,我也看到了第二种方法。这两种方法有什么区别吗?结果显然是一样的。

【问题讨论】:

  • 在大型匿名函数上,如果要执行函数,约定是将函数括在括号中。这允许人们查看您是分配自执行函数的返回值还是将函数分配给变量。

标签: javascript


【解决方案1】:

为了便于阅读,将 IIFE(立即调用函数表达式)括在括号中是一种很好的做法(但不是必需的)。如果你的函数很长并且读者看不到结尾,那么左括号会提醒读者注意这个函数表达式有一些特别之处,并迫使他们查看底部以找出它是什么。

【讨论】:

    【解决方案2】:

    第一种语法只有当你将函数执行的结果赋给一个变量时才有效,如果你只是想执行函数,这种形式会出现语法错误:

    function(){
       return 'test';
    }();
    

    不过,另一种形式仍然有效:

    (function(){
        return 'test';
     })();
    

    因此第二个版本更灵活,可以更一致地使用。

    (第一种形式不是avoid ambiguities in the Javascript grammar的有效语法。)

    【讨论】:

      【解决方案3】:

      是的,第一个将变量 a 设置为匿名变量,而第二个将变量 a 设置为函数的结果。

      编辑:我读错了第一个代码。答案是否定的。

      【讨论】:

      • “a 作为匿名变量”是什么意思?变量如何匿名??
      • 我没有在代码的第一个 sn-p 的第三行看到 ()。他们都是一样的。
      猜你喜欢
      • 2020-11-28
      • 2011-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-05
      • 1970-01-01
      • 2011-03-24
      相关资源
      最近更新 更多