我有一个函数可以复制包含key:function对的映射,
用调用函数包装每个函数。
function duplicateFunctionsMap(functionsMap){
var newMap = {};
for (var name in functionsMap){
var originalFunc = functionsMap[name];
newMap[name] = function(){
originalFunc();
}
}
return newMap;
}
现在尝试运行重复映射中的任何条目,结果总是调用最后一个
duplicateFunctionsMap({
first: function(){alert("first");},
last: function(){alert("last");}
})["first"](); // outputs "last"
最佳答案
您必须引入一个范围,以防止originalFunc
更改。函数引入了新的作用域,但是for
循环却没有:
for (var name in functionsMap){
(function(originalFunc) {
newMap[name] = function(){
originalFunc();
}; // <-- add semicolon at end of expression, too
})(functionsMap[name]);
}
关于javascript - JavaScript范围和哈希图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8605524/