【发布时间】:2021-08-28 00:35:37
【问题描述】:
var arr = []
for (var i = 0; i < 5; i++) {
arr[i] = function(id) {
return function() {
return id;
}
}(i);
}
for (var index in arr) {
console.log(arr[index]());
}
我的想法: 'I' 在 (i) 中;将引用全局变量“I”。 'I' 在 (i) 中;将保存在函数(id)中的“id”中。 'id' 是外部函数的局部变量。内部函数中的“id”将引用外部函数的局部变量“id”。然后,结果是'0,1,2,3,4'。 但我想我可以在没有外部函数的情况下得到相同的结果。
var arr = []
for (var i = 0; i < 5; i++) {
arr[i] = function(id) {
return id;
}(i);
}
for (var index in arr) {
console.log(arr[index]());
}
在这种情况下,'I' 在 (i) 中;将引用作为全局变量的“I”。 'I' 在 (i) 中;将保存在函数的局部变量“id”中。 返回代码后面的“id”将引用“id”,它是函数的局部变量。然后,结果是'0,1,2,3,4'。 不需要像第一个代码那样使用外部函数,因为第二个代码是可能的。我说的对吗?
【问题讨论】:
-
因为您使用的是
var而不是let。 -
"我错了吗?" 显然第二个代码会引发错误,所以我猜答案是“是”。问题在于,在第二种情况下,您没有将 functions 分配为数组的成员,而是 execute 一个函数并分配结果。所以数组是
[0, 1, 2, 3, 4]不是返回这些值的函数。
标签: javascript closures