可能重复:
Javascript closure inside loops - simple practical example
您有一组任意值。在全局范围内编写一个转换函数,它将数组转换为返回原始值的函数数组,因此我们将调用a3而不是调用[3]。
例如我想:
var a = ["a", 24, { foo: "bar" }];
var b = transform(a);
a[1]; // 24
b[1](); // 24
但是我得到了:
b
[function () {
return this.temp;
}, function () {
return this.temp;
}, function () {
return this.temp;
}]
这是我的代码:
var a = ["a", 24, { foo: "bar" }];
var b = transform(a);
document.writeln(a[1]); // 24
document.writeln(b[0]()); // 24
document.writeln(b[1]()); // 24
function transform(array) {
b = [];
var i;
for (i = 0; i < array.length; i += 1) {
b[i] = function () {
return temp;
};
}
return b;
}
答案 0 :(得分:1)
function transform(array) {
b = [];
var i;
for (i = 0; i < array.length; i += 1) {
b[i] = (function (x) {
return function () { return x; };
})(array[i]);
}
return b;
}
答案 1 :(得分:0)
如果您致电b[0]()
,您的代码是正确的,那么您应该获得返回的值。
答案 2 :(得分:0)
什么是temp
?看起来完成此操作的方法是通过另一个函数生成函数:
function transform(array) {
b = [];
var i;
for (i = 0; i < array.length; i += 1) {
b[i] = createReturnFunction(a[i]);
};
}
return b;
}
function createReturnFunction(value){
return function(){ return value; };
}
答案 3 :(得分:0)
请注意,现有的答案都不会起作用;它们都将生成在a
中返回最后一个值的函数。 var
是函数范围的,并且与闭包的交互性很差。
请参阅我刚才写的其他答案,它解释了类似的问题:https://stackoverflow.com/a/14330595/17875