编写一个将本地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
声明; - 减少程序员花费在尝试使用尽可能少
var
的 s 上的时间 - 在一个地方定义的所有本地变量
...和缺点:
arguments
可以以意想不到的方式改变。见下文- 在正文中不太清楚 vars 是本地的
- 困惑地看到无用的论点
- 如果有人在不知不觉中删除了它们,您的代码将写入全局变量
仍然可能是缩小器自动挤出更多位的简单方法。
更新:到目前为止没有提到的一个很大的缺点:如果使用 N 个参数调用函数,则其中的前 N 个项目arguments
将绑定到参数列表中的前 N 个标识符(参见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]
。