我有一个函数可以复制包含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/

10-11 08:10