utiliza una tipos terminar pasar parametros para objeto metodos lista las instrucciones funciones funcion ejemplos desde crear javascript performance

una - Las variables de JavaScript declaran fuera o dentro del bucle?



pasar parametros a una funcion javascript desde html (11)

En AS3, creo que debería inicializar todas las variables fuera de los bucles para aumentar el rendimiento. ¿Es este el caso de JavaScript también? ¿Cuál es mejor / más rápido / mejor práctica?

var value = 0; for (var i = 0; i < 100; i++) { value = somearray[i]; }

o

for (var i = 0 ; i < 100; i++) { var value = somearray[i]; }


Acabo de hacer una simple prueba en Chrome. Prueba el fiddle en tu navegador y mira los resultados.

var count = 100000000; var a = 0; console.log(new Date()); for (var i=0; i<count; i++) { a = a + 1 } console.log(new Date()); var j; for (j=0; j<count; j++) { a = a + 1; } console.log(new Date()); var j; for (j=0; j<count; j++) { var x; x = x + 1; } console.log(new Date());

El resultado es que la última prueba toma ~ 8 segundos y las 2 anteriores son solo ~ 2 segundos. Muy repetidamente y sin importar el orden.

Entonces, esto me demuestra que uno siempre debe declarar las vars fuera del bucle. Un caso curioso para mí es el primero en el que declaro i en la declaración for (). Este parece ser tan rápido como la segunda prueba en la que declaro previamente el índice.


Bueno, eso depende de lo que intenta lograr ... si el value supone ser solo una variable temporal dentro del bloque de bucle, entonces es mucho más claro usar la segunda forma. También es más lógico y detallado.


El ECMA-/Javascript cualquier variable que se declara en la parte superior de una función. Esto se debe a que este lenguaje tiene un function scope y no tiene block scope como muchos otros lenguajes similares a C.
Eso también se conoce como lexical scope .

Si declaras algo como

var foo = function(){ for(var i = 0; i < 10; i++){ } };

Esto se hoisted a

var foo = function(){ var i; for(i = 0; i < 10; i++){ } }

Así que no hay ninguna diferencia en el rendimiento (pero corrígeme si estoy totalmente equivocado aquí).
Un argumento mucho mejor para no declarar una variable en otro lugar que en la parte superior de una función es la legibilidad . Declarar una variable dentro de un for-loop puede llevar a la suposición errónea de que solo se puede acceder a esta variable dentro del cuerpo del bucle, lo cual es totalmente erróneo . De hecho, puede acceder a esa variable en cualquier lugar dentro del alcance actual.


El próximo año, todos los navegadores tendrán motores JS que precompilan el código, por lo que la diferencia de rendimiento (que proviene del análisis del mismo bloque de código una y otra vez, más la ejecución de la asignación) debería ser insignificante.

Además, nunca optimice el rendimiento a menos que tenga que hacerlo. Mantener las variables cerca del lugar donde las necesita la primera vez mantiene su código limpio. En el lado negativo, las personas que están acostumbradas a los idiomas con ámbitos de bloque pueden estar confundidas.


En lo que respecta al rendimiento después de ejecutar la prueba en Chrome, Firefox y jsperf en un sistema operativo Linux, parece haber una diferencia de rendimiento entre la declaración de variables en un bucle y fuera de un bucle. Es una pequeña diferencia, pero esto también está compuesto por la cantidad de iteraciones y la cantidad de declaraciones variables.

Por lo tanto, para obtener el mejor rendimiento, tendría que sugerir la declaración de variables fuera del bucle. O mejor aún declara tus variables en línea. Ver ejemplo

// inline for (var ai = 0, al = 100000000, av; ai < al; ai++) { av = av + 1; } // outside var bv; var bl = 100000000; for (var bi = 0; bi < bl; bi++) { bv = bv + 1; }

Observe cómo las variables ''al'' y ''av'' están en la línea de declaración de bucle for. Esta declaración en línea me ha proporcionado un mejor rendimiento constante. Incluso sobre la declaración de variables fuera del bucle. Una vez más, la diferencia de rendimiento es muy pequeña.

https://jsperf.com/outside-inline-for-loop-ase/1


En teoría, no debería hacer ninguna diferencia en JavaScript, ya que el lenguaje no tiene alcance de bloque, sino solo alcance de función.

No estoy seguro sobre el argumento de rendimiento, pero Douglas Crockford todavía recomienda que las declaraciones var sean las primeras declaraciones en el cuerpo de la función. Cotización de las convenciones de código para el lenguaje de programación de JavaScript :

JavaScript no tiene un ámbito de bloque, por lo que definir variables en bloques puede confundir a los programadores que tienen experiencia con otros lenguajes de la familia C. Define todas las variables en la parte superior de la función.

Creo que tiene un punto, como se puede ver en el siguiente ejemplo. La declaración de las variables en la parte superior de la función no debe confundir a los lectores al pensar que la variable i se mantiene en el alcance del bloque de bucle for :

function myFunction() { var i; // the scope of the variables is very clear for (i = 0; i < 10; i++) { // ... } }


JavaScript es un lenguaje escrito en la parte inferior por C o C ++, no estoy muy seguro de cuál es. Y uno de sus propósitos es guardar el lujo de manejar la memoria interna. Incluso en C o C ++, no tendrá que preocuparse por si consumirá muchos recursos cuando las variables se declaren dentro de un bucle. ¿Por qué debería preocuparse por ello en JavaScript?


La pregunta aquí es básicamente declarar una var dentro de un bucle. Solo piensa lo que pasa si haces esto:

var a = 30; var a = 50; var a = 60;

¿Crees que esto es correcto? No ... porque no quieres declarar una variable tantas veces. Cuando declara una variable dentro de un bucle, ¿no declara tantas veces que se ejecuta el bucle? Obviamente, te dará una bofetada cuando estés en el modo ''uso estricto''. La gente no está de acuerdo con Crockford sin pensar en la pregunta original.

Por lo tanto, siempre es bueno declarar las variables en la parte superior: 1. Para facilitar la lectura, 2. Hacer buenos hábitos.


No hace ninguna diferencia si declara variables dentro o fuera del bucle for. A continuación se muestra el código de ejemplo para probar.

function a() { console.log(''Function a() starts''); console.log(new Date()); var j; for (j=0; j<100000000; j++) { var x; x = x + 1; } console.log(new Date()); console.log(''Function a() Ends''); } a() function b() { console.log(''Function B() starts''); console.log(new Date()); var a; var j; for (j=0; j<100000000; j++) { a = a + 1; } console.log(new Date()); console.log(''Function B() Ends''); } b()

Los resultados mostrados en mi caso.

Function a() starts VM121:3 Thu Apr 12 2018 15:20:26 GMT+0530 (India Standard Time) VM121:9 Thu Apr 12 2018 15:20:26 GMT+0530 (India Standard Time) VM121:10 Function a() Ends VM121:14 Function B() starts VM121:15 Thu Apr 12 2018 15:20:26 GMT+0530 (India Standard Time) VM121:21 Thu Apr 12 2018 15:20:26 GMT+0530 (India Standard Time) VM121:22 Function B() Ends

Gracias - MyFavs.in


No hay absolutamente ninguna diferencia en significado o rendimiento, en JavaScript o ActionScript.

var es una directiva para el analizador, y no un comando ejecutado en tiempo de ejecución. Si un identificador particular se ha declarado var una o más veces en cualquier parte del cuerpo de una función (*), todo el uso de ese identificador en el bloque se referirá a la variable local. No importa si se declara que el value es var dentro del bucle, fuera del bucle o ambos.

En consecuencia, debe escribir lo que encuentre más legible. No estoy de acuerdo con Crockford en que poner todas las variables en la parte superior de una función siempre es lo mejor. En el caso de que una variable se use temporalmente en una sección del código, es mejor declarar var en esa sección, por lo que la sección es independiente y se puede copiar y pegar. De lo contrario, copie y pegue algunas líneas de código en una nueva función durante la refactorización, sin seleccionar y mover por separado la var asociada, y tendrá un global accidental.

En particular:

for (var i; i<100; i++) do something; for (var i; i<100; i++) do something else;

Crockford le recomendará que elimine la segunda var (o elimine ambas var s y haga var i; arriba), y jslint le avisará por esto. Pero IMO es más fácil mantener ambas var , manteniendo todos los códigos relacionados juntos, en lugar de tener un bit de código adicional y fácil de olvidar en la parte superior de la función.

Personalmente tiendo a declarar como var la primera asignación de una variable en una sección independiente del código, ya sea que haya o no otro uso separado del mismo nombre de variable en alguna otra parte de la misma función. Para mí, tener que declarar var en absoluto es una verruga de JS indeseable (hubiera sido mejor tener variables predeterminadas a locales); No veo que sea mi deber duplicar las limitaciones de [una antigua revisión de] ANSI C en JavaScript también.

(*: excepto en cuerpos de función anidados)


Otra consideración, ahora que hemos let y const en ES2015, es que ahora puede definir variables específicamente para el bloque de bucle. Entonces, a menos que necesite la misma variable fuera del bucle (o si cada iteración depende de una operación realizada a esa variable en la iteración anterior), probablemente sea preferible hacer esto:

for (let i = 0; i < 100; i++) { let value = somearray[i]; //do something with `value` }