正常函数与转换另一函数的IIFE之间的差异

时间:2015-08-20 10:33:17

标签: javascript

我的代码是这样的:

示例1:

var fn = (function () {
    function fn (a, b, c) {
        /* CODE HERE */
    };

    return fn;

})();

fn(a, b, c);

示例2:

var fn = function fn (a, b, c) {};
fn(a, b, c);

这两个电话有什么区别?我试图重构一些代码。当我试图像第二个例子那样推出fn函数时,它会失败。

1 个答案:

答案 0 :(得分:3)

IIFE最常见的用例是创建一个包含一些私有变量的闭包。例如:

var counter = (function() {
    // This variable is private. You cannot change it from the outer code.
    var i = 0;

    return function() {
        return i++;
    };
})();

console.log(counter());
console.log(counter());
console.log(counter());

输出:

0
1
2

因此,当您将IIFE重构为常规函数时,您必须确保以正确的方式处理闭包。