我的印象是,每次调用一个函数都是该函数的新实例。这段代码如何占用n并递增它,而每次n都不会设置回零?
const f = (function()
{
let n = 0;
return function()
{
return ++n;
}
}());
console.log(f()); // prints 1
console.log(f()); // prints 2
console.log(f()); // prints 3
答案 0 :(得分:0)
IIFE仅执行一次,并且将值分配给f
。因此,只有一个闭包,并且它有一个n
,每次调用返回的函数时都会递增。
如果您写以下内容,将会产生预期的结果:
const f = function() {
let n = 0;
return function() {
return ++n;
}
};
console.log(f()()); // prints 1
console.log(f()()); // prints 1
console.log(f()()); // prints 1
这不使用IIFE,它只是一个普通的高阶函数。每次调用f
时,您都会得到一个新的闭包。