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 NOWA 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