for (i = 0; i < 10; i++) {
(function(i) {
setTimeout(function() {
console.log(i)
}, 10)
})(i)
}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
console.log(i)里面的i用的是IIFE里的i,相当于一个闭包
如果没有里面的自执行函数,那么输出的就是只有10。
你的示例压根就不是闭包,首先如果一定要把你的示例改进,应该这么写:
一个闭包至少需要满足有状态,就像我改写示例中加了一个
count来表示我调用的次数。这里的count是不受外界影响的。OK,我们再回头看你的示例,在
for内部加一个函数(你的示例没有函数名而已),这意味者每一次迭代生成一次函数、然后被销毁。至于什么是闭包,满足两点就是了吧:
有状态
闭包只是一个函数