相关疑难解决方法(0)

请解释在循环中使用JavaScript闭包

我已经阅读了关于循环内的闭包和闭包的一些解释.我很难理解这个概念.我有这样的代码:有没有办法尽可能地减少代码,因此闭包的概念可以更清晰.我很难理解i两个括号内的部分.谢谢

function addLinks () {
    for (var i=0, link; i<5; i++) {

        link = document.createElement("a");
        link.innerHTML = "Link " + i;


        link.onclick = function (num) {
            return function () {
                alert(num);
            };
        }(i);
        document.body.appendChild(link);

    }
}
window.onload = addLinks;
Run Code Online (Sandbox Code Playgroud)

javascript closures scope loops

56
推荐指数
2
解决办法
3万
查看次数

闭包中的变量存储在哪里 - 堆栈还是堆?

如下代码:

var foo = function() {
    var a = 1; // closure var
    return function() { // closure fun
        console.log(a);
    }
};
var bar = foo();
Run Code Online (Sandbox Code Playgroud)

当foo退出(或者说,返回)时,我们知道变量a不会被破坏并保留在内存中(这就是闭包工作的原因).所以我的问题是变量是存储,堆栈还是堆?

javascript heap stack closures

13
推荐指数
1
解决办法
2639
查看次数

JavaScript闭包如何在低级别工作?

我知道闭包被定义为:

[A]堆栈帧,当函数返回时不会释放.(好像'stack-frame'是malloc'ed而不是堆栈!)

但我不明白这个答案如何适应JavaScript的存储机制.口译员如何跟踪这些价值观?浏览器的存储机制是否以类似于堆和堆栈的方式进行分段?

关于这个问题的答案:JavaScript闭包如何工作?说明:

[A]函数引用也有一个关闭的秘密引用

这个神秘的"秘密参考"背后的潜在机制是什么?

编辑许多人说这是依赖于实现的,所以为了简单起见,请在特定实现的上下文中提供解释.

javascript browser closures

12
推荐指数
2
解决办法
1070
查看次数

javascript中自调用函数内变量的生命周期是多少

我一直在努力理解以下代码:

var add = (function () {
        var counter = 0;
        return function () {return counter += 1;}
    })();
    add();
    add();
    add();
Run Code Online (Sandbox Code Playgroud)

这里add分配了匿名自调用函数的返回值 - 即函数function() { return counter += 1 }.现在第一次add()被调用它1按预期返回.但第二次add()称它返回2.

我的问题是因为counter在函数内定义所以不是每次函数完成执行counter都应该死掉?也就是说,在第一次调用add()1之后将显示.现在我们已经不在那个函数中,所以不应该counter忘记它以前的值并且像automatic变量一样从堆栈中销毁?

javascript variables lifetime

1
推荐指数
1
解决办法
607
查看次数

标签 统计

javascript ×4

closures ×3

browser ×1

heap ×1

lifetime ×1

loops ×1

scope ×1

stack ×1

variables ×1