在Javascript循环中定义函数并使用循环中设置的变量

时间:2014-04-22 17:40:44

标签: javascript function loops

我试图在javascript中循环定义函数......

for (var i in myArray) {
  Object.defineProperty(object, "field"+i, { ... });
}

...并且每个函数都需要使用在该循环中设置的变量...

for (var i in myArray) {
  Object.defineProperty(object, "field"+i, { 
    get: function() { return "some operation" + myArray[i]; }
  });
}

...但是这不起作用,因为当我调用这些函数时(在定义它们之后很久),i会计算myArray中的最后一项。我在循环中定义的所有函数都返回相同(错误)的值。

有谁能告诉我如何实现我的目标:在我的getter函数中使用myArray[i]

2 个答案:

答案 0 :(得分:2)

我使用工厂函数创建了一个额外的闭包:

function makeGetter(myString) {
  return function () { return "some operation" + myString; };
}
for (var i in myArray) {
  Object.defineProperty(object, "field"+i, { 
    get: makeGetter(myArray[i])
  });
}

答案 1 :(得分:0)

这可以按照以下方式完成

for (var i in myArray) 
  {
  var getter=function yourName () { return "some operation" + yourName.data;}
  getter.data=myArray[i];
  Object.defineProperty(object, "field"+i, { 
  get: getter});
  }

您可以使用

定义一个函数
 var test=function testit () {}

testit可用于从函数内部调用函数。 它是一个locale变量,它替换了arguments.callee,它在严格模式下被删除。

测试是在函数外部定义的,用于从外部调用