javascript - javascript闭包是否为每次迭代在内存中创建一个新的保留空间?

标签 javascript closures

我有这个闭包代码:

    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/

相关文章:

memory - 为什么在Rust中 “capture by reference”与 “capture a reference by value”等效?

javascript - $.when( 2 个条件 ).then(function(){});

javascript - Jquery 平滑滚动动画无法正常工作

c# - 转换结构的算法(传递闭包?)

python - 我可以恢复闭包包含 Python 循环的函数吗?

for-loop - 使用闭包在 for 循环中动态添加单击函数

javascript - 如何在 nvd3 饼图切片中添加图像?

javascript - 在 <canvas> 元素上实现流畅的素描和绘图

Javascript 或 jQuery 滑动到元素

node.js - http.get请求循环关闭问题(Node)