我还在与闭包的概念作斗争,当我需要实现它时。我经常在试验和错误之后到达那里,但我觉得如果我对它的使用有一些简明的解释,我可以抢先重写脚本以包含它。有没有人想要解决一个经常令人困惑的概念?
答案 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等等。
在基础层面,它几乎就是这样;闭包是捕获对外部另一个变量的引用,通常是该对象的范围。