2013-02-01 62 views
2

看到的第一個代碼: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); 
    }; 

    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); 
    }); 
}); 

這裏如期關閉功能無法正常工作。每次單擊段落元素時,計數器var都會增加,但在第二段元素上單擊時不會顯示該增量值?這是什麼原因?這是爲什麼發生?每個段落元素的count變量不會增加。

+0

傳遞給'。點擊()函數'本身是一個封閉,和你做的第一件事情之一是設置局部變量'count'爲'0 '在裏面; 「count」的值永遠不會變成別的,因爲你明確地告訴它總是0. –

回答

2

你的意思是:

var count = 0; 
$("p").each(function() { 
    var $thisParagraph = $(this); 
    //var count = 0; //removed this count, as it re-inits count to 0 
    $thisParagraph.click(function() { 
    count++; 
    $thisParagraph.find("span").text('clicks: ' + count); 
    $thisParagraph.toggleClass("highlight", count % 3 == 0); 
    }); 
}); 
+0

謝謝你的信息。 –

+0

但是在上面的代碼中函數中聲明瞭count變量(第一和第二代碼) –

+0

@MaizerePathak:第一個代碼示例,同時聲明count變量兩次,並將它聲明爲**在循環外**第二個例子已經在循環中嵌入了**。因此在第一個示例中,每次迭代都不會覆蓋計數。不像第二個例子中count在每次迭代中被覆蓋。 – Nope

相關問題