javascript闭包不能正常工作
请参见第一个代码:javascript闭包不能正常工作,javascript,jquery,Javascript,Jquery,请参见第一个代码: 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 ()
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
都会增加,但点击第二个段落元素时不会显示该增量?这是什么原因?为什么会这样?每个段落元素的计数变量没有增加。您的意思是:
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);
});
});
传递给
.click()
的函数本身就是一个闭包,您首先要做的事情之一是将其内部的局部变量count
设置为0
;count
的值永远不会是其他值,因为您已明确告诉它始终为0。但是count变量(第一个和第二个代码)都在上面的函数中声明code@MaizerePathak:第一个代码示例在两次声明count变量的同时,将其声明在循环外,而第二个示例将其放在循环中。因此,在第一个示例中,每次迭代都不会覆盖计数。与第二个示例不同,在该示例中,计数在每次迭代中都会被覆盖。它不会将init count重新初始化为0。它隐藏外部计数变量,因此每个单击回调都有一个独立的计数,并且不能接触外部计数。
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);
});
});