Javascript 在循环中将函数推入数组
Javascript push function into array in a loop
var calls = [];
for (var y = 1; y <= 10; y++) {
for (var x = 1; x <= 10; x++) {
calls.push(function() {
yooMe(x, y);
});
}
}
for (var i in calls) {
calls[i]();
}
var yooMe = function(x, y) {
console.log(x + ':' + y);
}
我想用循环将一些函数(x、y 作为参数)推入数组。之后我将循环数组以调用该函数。但是,结果不是我所期望的。结果是 10:10 10:10 ... 10:10。我期望的是 1:1 2:1 3:1 ... 10:10。我认为问题是可变引用问题,但我不知道如何解决这个问题。
P.S。抱歉我的英语不好
这是因为你引用了 for 循环中变化的 x 和 y,所以当你执行函数时你有最后一个值,要解决这个问题你需要添加闭包:
for (var y = 1; y <= 10; y++) {
for (var x = 1; x <= 10; x++) {
(function(x, y) {
calls.push(function() {
yooMe(x, y);
});
})(x, y);
}
}
var calls = [];
for (var y = 1; y <= 10; y++) {
for (var x = 1; x <= 10; x++) {
calls.push(yooMe(x, y));
}
}
for (var i in calls) {
calls[i]();
}
function yooMe(x, y) {
return function () {
console.log(x + ':' + y);
}
}
var calls = [];
for (var y = 1; y <= 10; y++) {
for (var x = 1; x <= 10; x++) {
calls.push(function() {
yooMe(x, y);
});
}
}
for (var i in calls) {
calls[i]();
}
var yooMe = function(x, y) {
console.log(x + ':' + y);
}
我想用循环将一些函数(x、y 作为参数)推入数组。之后我将循环数组以调用该函数。但是,结果不是我所期望的。结果是 10:10 10:10 ... 10:10。我期望的是 1:1 2:1 3:1 ... 10:10。我认为问题是可变引用问题,但我不知道如何解决这个问题。 P.S。抱歉我的英语不好
这是因为你引用了 for 循环中变化的 x 和 y,所以当你执行函数时你有最后一个值,要解决这个问题你需要添加闭包:
for (var y = 1; y <= 10; y++) {
for (var x = 1; x <= 10; x++) {
(function(x, y) {
calls.push(function() {
yooMe(x, y);
});
})(x, y);
}
}
var calls = [];
for (var y = 1; y <= 10; y++) {
for (var x = 1; x <= 10; x++) {
calls.push(yooMe(x, y));
}
}
for (var i in calls) {
calls[i]();
}
function yooMe(x, y) {
return function () {
console.log(x + ':' + y);
}
}