w3schools valor utiliza una tipos terminar retornar pasar parametros para las instrucciones funciones funcion desde codigos anidadas javascript loops computation

utiliza - retornar valor de una funcion javascript



En JavaScript, ¿cuáles son las razones específicas por las que crear funciones dentro de un ciclo puede ser un desperdicio computacional? (2)

En JavaScript, ¿cuáles son las razones específicas por las que crear funciones dentro de un ciclo puede ser un desperdicio computacional?

En la página 39 de JavaScript Good Parts, Douglas Crockford afirma: "Evite crear funciones dentro de un ciclo. Puede ser un desperdicio computacional". Parece que no puedo entender por qué la creación de funciones dentro de un ciclo sería más un desperdicio que fuera.


Crear una función puede usar muchos recursos. Como las funciones son de hecho objetos, el código tiene que crear realmente un nuevo objeto de función cada vez, no puede simplemente crearlo una sola vez y luego simplemente reutilizarlo.

Crear una función dentro de un bucle generalmente significa que creará muchas funciones en lugar de crear una sola función fuera del bucle.

Por lo tanto, es solo cuestión de no hacer algo con un uso intensivo de recursos dentro de un ciclo si puede hacerlo una vez fuera del ciclo. Cuando se trata de funciones, a menudo se pueden crear fuera del bucle sin cambiar la lógica del código.


Porque está creando varios objetos Function lugar de reutilizar solo uno.

Ejemplo de crear una función idéntica ...

for (var i = 0; i < 10; i++) { // v--creating identical function in each iteration. (function(j) { var el = document.createElement(''a''); el.onclick = function() { alert(j); }; document.body.appendChild(el); })(i); }

Ejemplo de reutilización de una función nombrada ...

for (var i = 0; i < 10; i++) { var el = document.createElement(''a''); // ----------v---calling a reusable function el.onclick = createHandler(i); document.body.appendChild(el); } function createHandler(j) { return function() { alert(j); }; }

Los dos ejemplos tienen el mismo resultado, pero el segundo no requiere la sobrecarga de hacer dos funciones durante el ciclo. En cambio, crea solo un controlador.