什么是正确的javascript IIFE模板?

时间:2014-10-31 17:32:00

标签: javascript iife

我一直在使用以下内容开始填写IIFE的代码:

(function() {
    /* code goes here */
}());

我偶尔会看到以下内容:

(function() {
    /* code goes here */
})();

哪个是正确的?

2 个答案:

答案 0 :(得分:1)

根据Douglas Crockford(jslint的创建者)的说法,当另一个开发人员读取您的代码时,第一个不易出错。但并不是每个人都必须尊重这一点,虽然知道存在的是什么以及为什么会很好,但两者都很好。

  

当要立即调用函数时,整个调用   表达应该用parens包裹,以便明确表示   产生的价值是功能的结果,而不是   功能本身。

var collection = (function () {
    var keys = [], values = [];

    return {
        get: function (key) {
            var at = keys.indexOf(key);
            if (at >= 0) {
                return values[at];
            }
        },
        set: function (key, value) {
            var at = keys.indexOf(key);
            if (at < 0) {
                at = keys.length;
            }
            keys[at] = key;
            values[at] = value;
        },
        remove: function (key) {
            var at = keys.indexOf(key);
            if (at >= 0) {
                keys.splice(at, 1);
                values.splice(at, 1);
            }
        }
    }; }());

答案 1 :(得分:0)

纯粹是一种审美偏好。使用类似的东西。道格拉斯·克罗克福德(Douglas Crockford)努力推广第一个,但我经常看到第二个。