Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript闭包不能正常工作_Javascript_Jquery - Fatal编程技术网

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