我正在尝试在循环中创建动态函数。但是,动态函数返回意外值。这是我的代码。
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()
返回A
和getb()
返回B
。但是,它们都返回B
。我试图在Chrome中使用调试模式,发现每次迭代都没有重置value
。在每次迭代中,循环中的变量不应该不同吗?
我做错了什么?我有什么不理解的东西吗?
答案 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。