数组到函数数组

时间:2013-01-15 03:42:53

标签: javascript

  

可能重复:
  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;
}

4 个答案:

答案 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;
}

demo http://jsbin.com/udasoj/1/edit

答案 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; }; 
}

工作小提琴:http://jsfiddle.net/eFWyf/

答案 3 :(得分:0)

请注意,现有的答案都不会起作用;它们都将生成在a中返回最后一个值的函数。 var是函数范围的,并且与闭包的交互性很差。

请参阅我刚才写的其​​他答案,它解释了类似的问题:https://stackoverflow.com/a/14330595/17875