如果必须使用哪一个,我应该使用哪一个?
注意:在实际代码中,我没有在全局范围内创建所有内容,但想法仍然相同。
//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]);
答案 0 :(得分: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']();