我的代码中的各种函数中出现了多次循环。 举一个例子说明,它几乎与以下几行有关:
for (var i=0;i<= 5; i++) {
function1(function2(arr[i],i),$('div'+i));
$('span'+i).value = function3(arr[i]);
}
我当然是循环计数器。为了减少我的代码大小并避免重复循环声明,我想我应该用以下内容替换它:
function loop(s) {
for (var i=0;i<= 5; i++) { eval(s); }
}
[...]
loop("function1(function2(arr[i],i),$('div'+i));$('span'+i).value = function3(arr[i]);");
或者我应该吗?我已经听说过很多关于eval()减慢代码执行速度的事情,我希望即使在Nintendo DSi浏览器中它也能正常工作,但我也希望减少代码。你会建议什么?
提前谢谢!
答案 0 :(得分:5)
为什么不将循环体放入函数中?
function doSomething(i, arr) {
function1(function2(arr[i],i), $('div'+i));
$('span'+i).value = function3(arr[i]);
}
并在循环中调用它:
function loop() {
for (var i = 0; i <= 5; i++) { doSomething(i, arr); }
}
答案 1 :(得分:1)
答案 2 :(得分:1)
尔加!
这是一个很好的问题,但不,不要那样做。一般不建议使用eval
,因为你不会在加载时看到解析错误,只在运行时(更难调试),更难理解范围是什么时候(更难写),而你丢失所有工具链支持(语法高亮,脚本调试)。
幸运的是,由于Javascript基本上是一种函数式语言,为什么不创建一个封装你想做的事情的函数,然后调用它呢?
function doMyThingNTimes(n, arr) {
for (var i=0;i <= n; i++) {
function1(function2(arr[i],i),$('div'+i));
$('span'+i).value = function3(arr[i]);
}
}
答案 3 :(得分:0)
eval
应该被视为接近最后的手段。 JavaScript函数是First Class Objects所以我只是声明你需要的任何函数并将它们作为一个参数传递。
答案 4 :(得分:0)
为什么不:
function loop(s) {
for (var i=0;i<= 5; i++) { s(i); }
}
loop(function4() {
function1(function2(arr[i],i),$('div'+i));$('span'+i).value = function3(arr[i]);
});