使用" IIFE"创造私人范围;我需要括号吗?

时间:2017-07-15 23:08:05

标签: iife

这是我的代码:

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

效果很好;我可以使用publicFunc()访问badget.publicFunc()privetVar可以访问privetFunc()var badget = (function() { var privetVar = 23; var privetFunc = function(a) { return privetVar + a; } return { publicFunc: function(b) { console.log(privetFunc(b)); } } })(); ,因为"关闭"。

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

{{1}}

第二个例子被认为是一个更好的语法吗?

1 个答案:

答案 0 :(得分:3)

不,在此示例中不需要括号。通常人们不会使用IIFE的返回值,因此必须使用括号来区分函数表达式< / em>来自函数语句

由于你的第一个例子中的函数声明已经是赋值表达式的一部分,它已经是一个函数表达式,所以括号不是必需的。

TL; DR

有效

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

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

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

有效(但不是必需的)

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

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

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

function () {
  ...
}();