0

如果我必须使用一个,我应该使用哪一个?

  • 使用方法 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]);
4

1 回答 1

3

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

我可能会将您的第一个版本替换为.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']();
于 2013-09-05T22:41:05.417 回答