¿Debería myFunc = function () {} evaluar de inmediato en Javascript?

Deja un comentario si me equivoco: en mi memory, pensé en la diferencia entre los dos styles de creación de funciones:

function myFunc(){}; 

y

 myFunc = function(){}; 

es la primera evaluación inmediata, y la posterior espera la llamada a la function.

así que obtuve este código en este artículo sobre la variable global que se adjunta al object window:

 function setGloabalVariable(){ window.variable = '1'; } 

después de cargar la página, ¿por qué la variable aún no está definida?

3 Solutions collect form web for “¿Debería myFunc = function () {} evaluar de inmediato en Javascript?”

La diferencia entre estos dos types de declaraciones es que la primera es una statement de function nombrada , la segunda es una expresión de function anónima . Ninguno de ellos se ejecuta automáticamente en su punto de statement (puede estar pensando en un IIFE).

 // Create a symbol named "my_named_function" // that points at the named function "my_named_function" function my_named_function() { } // Create a symbol named "my_anonymous_func" // that points to the *unnamed* function <anonymous function> var my_anonymous_func = function() { } 

Tanto my_named_function como my_anonymous_func no están ejecutados. Ambos se pueden ejecutar llamándolos:

 my_named_function(); my_anonymous_func(); 

Un IIFE (Expresión de function ejecutada inmediatamente) funciona de forma un poco diferente:

 (/* define a function */ function() { })(/* and *immediately* execute it */); 

Recomiendo leer el excelente artículo de kangax sobre expresiones y declaraciones de funciones para get más información sobre este tema.

function myFunc(){} es un literal de function global, no se "ejecuta" de inmediato, pero se puede hacer reference hacia delante y hacia atrás . Sentido:

 myFunc(); // this will run function myFunc(){} 

Como en:

 myFunc(); // this will **not** run myFunc = function (){} 

La diferencia con la segunda function es que, aunque no haya declarado un var myFunc = allí. Se convierte en una variable global (también conocida como una function anónima en línea), diferente de una function en línea global, en la que tiene que estar por encima de algo (referirse hacia atrás) para poder usarse.

 function setGloabalVariable(){ window.variable = '1'; // this could have been written // variable = '1'; var variable = '1'; // unless this function is called in some global scope, the closure won't // bring out this variable } 

Una function anónima se ejecuta al instante, y creo que eso es lo que estás pensando (pero no tenías en tu OP).

(function () { }());

Artículo sobre funciones anónimas autoejecutables

Las funciones anónimas crearon un ámbito local / interno. Ideal para crear espacios de nombres y mantener las cosas alejadas del espacio de nombres global.

La function nombrada se crea y se asigna en time de compilation, por lo que existe antes de que el código comience a ejecutarse. Ejemplo:

 x(); // This works, as the function below already exists function x() {} 

La function anónima se puede crear en time de compilation (depende de la implementación), pero el valor se asigna a la variable en time de ejecución. Ejemplo:

 x(); // This doesn't work, as the value is not assigned yet x = function(){}; x(); // Here it works 

En ambos casos, debe llamar a la function para que se ejecute el código dentro de la function.

Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.