两者中的哪一种是最有效的方法

Which of the two would be the most efficient way to do it?

本文关键字:有效 方法 哪一种      更新时间:2023-09-26

如果我必须使用哪一个?

  • 使用方法 1,我为每个可能的参数组合创建 1 个函数,但它很容易调用。
  • 对于方法 2,我只有 1 个函数,但更难调用。

注意:在实际代码中,我不会在全局范围内创建所有内容,但想法仍然相同。

       //Method 1:
       for(var key = 0 ; key < 1000 ; key++){
            for(var i = 0 ; i < 1000 ; i++){
                window[key + ' ' + i] = (function(key, i) { return function() {  aFunction(key, i); } })(key, i)
            }
        }
        //then I simply do
        //window['223 111']();

        //Method 2:
        for(var key = 0 ; key < 1000 ; key++){
            for(var i = 0 ; i < 1000 ; i++){
                window[key + ' ' + i] = ['aFunction',key,i]
            }
        }
        //then i need to do 
        //window[window['223 111'][0]](window['223 111'][1],window['223 111'][2]);

除非您遇到实际的性能问题,否则请追求清晰和轻松。

我可能会用.bind()替换您的第一个版本

for(var key = 0 ; key < 1000 ; key++){
    for(var i = 0 ; i < 1000 ; i++){
        window[key + ' ' + i] = aFunction.bind(window, key, i);
    }
}

在 IE8 及更低版本中不可用,但可以填充。


此外,您正在创建相当多的全局变量。我建议将它们全部放在命名空间对象中。

var NS = {}
for(var key = 0 ; key < 1000 ; key++){
    for(var i = 0 ; i < 1000 ; i++){
        NS[key + ' ' + i] = aFunction.bind(window, key, i);
    }
}
NS['223 111']();