【发布时间】:2011-05-21 05:21:24
【问题描述】:
编写一个函数以将本地var 语句替换为参数是否会影响性能?示例:
function howManyMatch(arr, pattern, /*ignored:*/ i, l, total) {
l = arr.length;
total = 0;
for (i = 0, i < l; i++) {
if (pattern.test(arr[i]))
total++;
return total;
}
一些优点:
- 较小的缩小尺寸:没有
var语句; - 尽量减少程序员使用
vars 所花费的时间 - 在一处定义的所有本地变量
...和缺点:
-
arguments可以以意想不到的方式改变。见下文 - 在正文中不太清楚 var 是本地的
- 对无用的论点感到困惑
- 如果有人在不知情的情况下删除了它们,您的代码将写入全局变量
对于缩小器来说,自动挤出更多位可能是一种简单的方法。
更新:到目前为止没有提到的一个很大的缺点:如果使用 N 个参数调用函数,arguments 中的前 N 个项目将绑定到参数列表中的前 N 个标识符 (请参阅last bullet in 10.1.8)。考虑一下:
function processStuff(/*ignored:*/i, j, k) {
// use i/j/k to loop
// do stuff with the arguments pseudo-array
}
在上面的例子中,如果你调用processStuff(stuff1, stuff2),设置i和j会分别覆盖arguments[0]和arguments[1]。
【问题讨论】:
-
我的问题主要是关于性能影响。我可能不会使用这种做法。许多人似乎没有意识到将所有 var 语句组合成一个会降低可读性:您基本上是在滥用逗号运算符将多个语句塞在一起。看到 Closure Compiler 可以为你做这个优化,每行只有一个 var 声明/赋值更具可读性。
标签: javascript variables arguments minify local-variables