【发布时间】:2019-05-26 06:11:56
【问题描述】:
我写了一个简单的 javascript 代码。我的 for 循环迭代一个“let”声明的变量,i 介于 0 和 2 之间。只有当 i == 2 时,才会在循环内声明函数。函数必须返回 i 变量的值。当我从循环外部调用此函数时,该函数返回 i = 2 的值(这对于块范围变量 i 来说很自然。但是,当我将循环代码重写为其非循环等效代码块时,该函数(仍然从块外调用)返回 i = 3 的值。这是怎么回事?
"use strict";
var printNumTwo;
for (let i = 0; i < 3; i++) {
if (i === 2) {
printNumTwo = function() {
return i;
};
}
}
console.log(printNumTwo()); //returns 2
// loop equivalent
{
let i = 0;
i = 1;
i = 2;
printNumTwo = function() {
return i;
}
i = 3;
}
console.log(printNumTwo()); // returns 3
【问题讨论】:
-
只是为了给下面的答案添加一点样板,您还可以使用自调用匿名函数来返回一个匿名函数其中
i被引用为参数。这样,i将被隔离到函数的范围内,因此它会记录 2:jsfiddle.net/briosheje/mho6wgxn 此外,你应该看看这个:stackoverflow.com/questions/762011/… -
尝试将你的函数变量更改为
const printNumTwo
标签: javascript loops for-loop scope let