我在循环中有一个函数,它在每次迭代中更改它的返回值,我想在函数中保存函数的所有返回值.
这段代码有什么问题:
function riddle() {
var a = [];
for (var i = 0; i < 10; i++) {
a.push(function() {
return i * i;
});
}
return a;}
// code to test your solution:
var a = riddle();
var b = [];
for (var i = 0; i < a.length; i++) { b.push(a[i]()); }
console.log(b);
Run Code Online (Sandbox Code Playgroud)
这应该打印:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
但相反,我得到了这个:
[100, 100, 100, 100, 100, 100, 100, 100, 100, 100]
这段代码出了什么问题?
变量i被提升到函数内的范围顶部riddle.数组中生成的匿名函数确实关闭了局部变量i.但是最后一个值i是10,所以它们都返回100.
顺便说一下,这段代码将为内部函数创建一个真正的局部变量,并按照您的意图执行.
a.push((
function(tmp) {
return function() {
return tmp*tmp;
};
})(i));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
626 次 |
| 最近记录: |