我有这个闭包
代码:
for (var i = 0, link; i < 5; i++)
{
link = document.createElement("a");
link.onclick = aaa(i);
document.body.appendChild(link);
}
function aaa(num)
{
return function ()
{
alert(num);
};
} ;
我最近一直在阅读很多有关闭包的内容。
有一件事我不明白。
- 当 i==0 时,它到达 i=0 的 aaa 并被执行,它返回应该锁定值
0
的新函数。
很好。(到目前为止我明白这一点)。
但是 i==1 会发生什么?
- 它又回到了 SAME aaa,现在它应该锁定
1
值。好的
但是等等!它已经为“0”值保存了“闭包”!
这个结构(闭包)是否为每次迭代在内存中创建一个新空间?
如果是这样 - 怎么可能?我们只有一个集中式 aaa
函数!
最佳答案
aaa
函数就像一个函数工厂;每次调用都会返回一个新函数(不一样),该函数在其执行上下文中将其num
变量设置为aaa
的初始参数。
关于javascript - javascript闭包是否为每次迭代在内存中创建一个新的保留空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8463680/