【问题标题】:Using "IIFE" to create private scope; do I need parentheses?使用“IIFE”创建私有范围;我需要括号吗?
【发布时间】:2017-07-15 23:08:04
【问题描述】:

这是我的代码:

var badget = function () {
    var privetVar = 23;
    var privetFunc = function (a) {
        return privetVar + a;
    }
    return {
        publicFunc: function (b) {
            console.log(privetFunc (b));
        }
    }
}();

效果很好;我可以使用badget.publicFunc() 访问publicFunc(),由于“关闭”,它可以访问privetVarprivetFunc()

但是,有人告诉我必须使用这样的括号:

var badget = (function() {
    var privetVar = 23;
    var privetFunc = function(a) {
        return privetVar + a;
    }
    return {
        publicFunc: function(b) {
            console.log(privetFunc(b));
        }
    }
})();

这第二个例子是否被认为是一种更可取的语法?

【问题讨论】:

    标签: iife


    【解决方案1】:

    不,本示例中不需要括号。 通常人们不使用 IIFE 的返回值,因此需要括号来区分函数表达式 来自函数语句

    由于第一个示例中的函数声明已经是赋值表达式的一部分,因此它已经是函数表达式,因此不需要括号。

    TL;DR

    有效

    var badget = function () {
      ...
    }();
    

    (function () {
      ...
    })();
    

    (function () {
      ...
    }());
    

    有效(但不是必须的)

    var badget = (function () {
      ...
    })();
    

    var badget = (function () {
      ...
    }());
    

    无效(函数语句不能是IIFE)

    function () {
      ...
    }();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-01
      • 2013-01-20
      • 2014-10-22
      • 2019-01-11
      • 2022-01-28
      • 1970-01-01
      • 2021-04-19
      • 1970-01-01
      相关资源
      最近更新 更多