Речь о том, чтобы никуда не передавать и не создавать ссылки на arguments, иначе выключаются оптимизации.
Пример:
function f1() {
f3(arguments);
}
function f2() {
var i = arguments.length;
var args = new Array(i);
while (i--) {
args[i] = arguments[i];
}
f3(args);
}
function f3(args) {
return args[0];
}
Как выяснилось по тестам
http://jsperf.com/leaking-arguments/2 код с функцией f2 работает гораздо быстрее, не смотря на то, что выполняет лишние действия.
На mbp c core i5 2.4GHz:
- как не странно Chrome 41 показывается практически одинаковые результаты (хотя это как бы для V8 оптимизация
https://github.com/petkaantonov/blue...ging-arguments)
- Firefox 35 в 5 раз быстрее!
- Safari 8 в 4 раза быстрее
- IE11 в 2 раза быстрее
Что-то я раньше не придавал этому большого значения, думал что это только для V8 актуально, а он и так быстрый, но как оказалось следует так делать для всех браузеров.