Evitar la modificación o pasando `arguments` en otras funciones - mata la optimización
###Background
Dentro de las funciones de JavaScript, el nombre de la variable arguments le permite acceder a todos los argumentos pasados a la función. arguments es una array-like object; arguments se puede acceder usando la array notation, y tiene la propiedad longitud, pero no tiene por qué muchos de los métodos incorporados en los arrays que tienen comofilter y map y foreach. Debido a esto, es una práctica bastante común para convertir arguments en un array utilizando:
var args = Array.prototype.slice.call(arguments);
Este método slice del prototipo array, pasándole arguments; el método slice devuelve una copia superficial del arguments como un nuevo objeto de matriz. A la abreviatura común para esto es:
var args = [].slice.call(arguments);
En este caso, en lugar de llamar slice del prototipo Array, se trata simplemente de ser llamado desde un array vacío literal.
###Optimización
Desafortunadamente, pasando arguments en cualquier llamada de función hará que el motor V8 JavaScript utilizado en Chrome y NodeJS para omitir la optimización de la función que hace esto, lo que puede resultar en un rendimiento considerablemente más lento. Ver este artículo optimization killers. Pasando arguments a cualquier otra función que se conoce como leaking arguments.
En cambio, si quieres un array de los argumentos que le permite utilizar lo que necesita recurrir a este:
var args = new Array(arguments.length);
for(var i = 0; i < args.length; ++i) {
args[i] = arguments[i];
}
Sí, es más prolija, pero en el código de producción, vale la pena para la optimización del rendimiento.
Use the 100 answers in this short book to boost your confidence and skills to ace the interviews at your favorite companies like Twitter, Google and Netflix.
GET THE BOOK NOW
A short book with 100 answers designed to boost your knowledge and help you ace the technical interview within a few days.
GET THE BOOK NOW