动态创建的函数返回错误的值

时间:2017-03-24 09:53:07

标签: javascript for-loop callback

我正在尝试在循环中创建动态函数。但是,动态函数返回意外值。这是我的代码。

var obj = {
  a: 'A',
  b: 'B'
}

for(var key in obj) {
    var value =  obj[key];
    obj['get'+key] = function() {
    return value;
  }
}

alert(obj.geta());

我希望geta()返回Agetb()返回B。但是,它们都返回B。我试图在Chrome中使用调试模式,发现每次迭代都没有重置value。在每次迭代中,循环中的变量不应该不同吗?

我做错了什么?我有什么不理解的东西吗?

1 个答案:

答案 0 :(得分:0)

您应该使用let关键字来声明变量仅在block中可见。

详细了解let keyword

var obj = {
  a: 'A',
  b: 'B'
}

for(var key in obj) {
    let value =  obj[key];
    obj['get'+key] = function() {
    return value;
  }
}

alert(obj.geta());

另一种方法是使用.bind()方法创建一个新函数,该函数在调用时将其this关键字设置为提供的值。

var obj = {
  a: 'A',
  b: 'B'
}

for(var key in obj) {
    var value =  obj[key];
    obj['get'+key] = (function(val) {
    return val;
  }).bind(this,value);
}

alert(obj.geta());

详细了解bind function