有人可以(清楚而简洁地)向我解释为什么这段代码会这样工作吗?我来自 Java(6 和 7)中的强类型背景,其中不存在闭包,也不像在 javascript 中那样运行。我认为与这个问题相关的概念是:闭包和范围链。
这是示例:
var myfuncs = function() {
var funcs = []
var i;
for (i = 0; i < 10; i++) {
funcs[i] = function() { console.log(i); }
}
return funcs;
}
var allfuncs = myfuncs();
allfuncs.forEach(function(fn) { fn(); });
上面的例子记录了 9(10 次),但期望和我自己的直觉认为它会记录 0-9。
为什么这会像在 Javascript 中那样工作?闭包非常强大,但我试图一劳永逸地掌握这个概念!稍加修改的示例会产生正确的输出,但为什么呢?
var myfuncs = function() {
var funcs = []
var i;
for (i = 0; i < 10; i++) {
funcs[i] = (function(index) { console.log(index); })(i);
}
return funcs;
}
var allfuncs = myfuncs();
allfuncs.forEach(function(fn) { fn(); });
闭包不是 Javascript 独有的,但我想看看为什么它们在实际编写 javascript 以与浏览器/dom 交互的上下文中如此强大。
有没有人有很好的、实用的例子来说明我们在与浏览器/dom 交互时如何应用闭包技术?
谢谢。