我知道闭包是如何工作的,但对我来说并不是很清楚。 下面的代码片段如何在引擎盖下工作(输出' 0):
function fillFunctionArr() {
let arr = [];
for (var i = 0; i < 10; i++) {
arr[i] = {
inner: i,
innerFunc: function() {
console.log(this.inner)
}
}
}
return arr;
}
var ex = fillFunctionArr();
ex[0].innerFunc()
当然,如果它被声明为:
arr[i] = {
// inner: i,
innerFunc: function() {
console.log(i)
}
}
输出为10。 为什么第一个片段比下面的片段更可取:
function fillFunctionArr() {
let arr = [];
for (var i = 0; i < 10; i++) {
arr[i] = (function(qnt) {
return function() {
console.log(qnt)
}
})(i);
}
return arr;
}
var ex = fillFunctionArr();
ex[0]()
答案 0 :(得分:0)
没有“优选”的选择。选择取决于您想要扩展的外部代码的逻辑。两者都在循环迭代时立即初始化。这只是JS灵活性的一个优势。