我的代码是这样的:
示例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函数时,它会失败。
答案 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重构为常规函数时,您必须确保以正确的方式处理闭包。