0

可能重复:
javascript 闭包不能正常工作

看第一个代码:

var count = 0;
(function addLinks() {
    var count = 0; //this count var is increasing

    for (var i = 0, link; i < 5; i++) {
        link = document.createElement("a");
        link.innerHTML = "Link " + i;

        link.onclick = function () {
            count++;
            alert(count);//here all the paragraph updates the same variable
        };

        document.body.appendChild(link);
    }
})();

当点击链接时,每个链接元素的计数器变量不断增加。这是一个方面的结果

第二:

var count = 0;
$("p").each(function () {
    var $thisParagraph = $(this);
    var count = 0; //this count var is increasing too.so what is different between them .They both are declared within the scope in which closure was declared

    $thisParagraph.click(function () {
        count++;
        $thisParagraph.find("span").text('clicks: ' + count);
        $thisParagraph.toggleClass("highlight", count % 3 == 0);
    });
});

这里的闭包函数没有按方面工作。每次单击段落元素时,计数器变量都会增加,但单击第二个段落元素时不会显示该增量?这是什么原因?为什么会发生这种情况?计数每个段落元素的变量都没有增加。在我之前的问题中,我没有得到满意的答案,所以我要求

4

1 回答 1

4

counter变量在循环内声明.each。因此,每个<p>都有自己的计数器,因为该函数是为每个执行的<p>。任何两个段落都不会更新同一个变量。

另一方面,在第一个片段中,只counter使用了一个变量(在循环之外),通过单击 any 来更新它<p>。作为旁注,请注意在循环内声明不会有什么不同 - 您必须为每个<p>单独创建一个闭包,以使每个<p>都有自己的计数器变量。

于 2013-02-01T12:18:33.720 回答