我已经实现了一个简单的轻量级every
功能。我注意到,如果该变量arguments
以某种方式在函数内部使用——它会将运行时间从800 毫秒增加到1300 毫秒(在我的情况下)。这是什么原因造成的?
我使用Chrome 29.0.1547.66 m。
function myEvery(list, fun, withArgument) {
var i;
fun = fun || function(val) { return val };
arguments; // with this statement the time is 1300 ms
// if you comment it out -- 800 ms
for (i = 0; i < list.length; i++) {
if (!fun.call(list, list[i], i)) {
return false;
}
}
return true;
};
// Create a huge array
var list = [];
for (i = 1; i < 20000000; i++) {
list.push(i);
}
// Measure the time
t1 = (new Date).getTime();
myEvery(list);
t2 = (new Date).getTime();
alert(t2 - t1);
(如果要测量执行arguments
语句本身的时间,则为 0 ms。)