在javaScript中可以最好地演示“闭包”的一些简单情况

时间:2011-08-19 17:39:01

标签: javascript closures function-pointers

  

可能重复:
  How do JavaScript closures work?

我还在与闭包的概念作斗争,当我需要实现它时。我经常在试验和错误之后到达那里,但我觉得如果我对它的使用有一些简明的解释,我可以抢先重写脚本以包含它。有没有人想要解决一个经常令人困惑的概念?

2 个答案:

答案 0 :(得分:2)

如果您正在寻找简单的解释,

Nathan's Lessons可能会清除您的困惑。

答案 1 :(得分:1)

考虑这个例子:

 for(var j = 0; j < 10; j++)
 {
     setTimeout(function()
     {
         alert(j);
     }, 1000);
 }

闭包包装对变量的引用,以便在调用函数时可以访问它。在上面的例子中,每个调用捕获对j的相同引用;所有功能都捕获相同的参考,并且所有功能都会警告'10'。现在考虑这个例子:

 for(var j = 0; j < 10; j++)
 {
     var innerReference = j;
     setTimeout(function()
     {
         alert(innerReference);
     }, 1000);
 }

在这个例子中,循环的每次迭代都捕获对新创建的'innerReference'变量的引用;每次迭代都会创建一个新的innerReference。因此,这次他们会显示1,2,3,4等等。

在基础层面,它几乎就是这样;闭包是捕获对外部另一个变量的引用,通常是该对象的范围。