veces izado se explica de una manera que puede dar una impresión equivocada, es decir, las variables y funciones se izan por el motor de JavaScript, como si fueran físicamente movido en la parte superior, lo que no es en realidad la derecha, como lo demuestra el código de abajo:
console.log(a);
var a = 'Hello World!';
lo que vemos en la consola es undefined
, no 'Hello World'
, así que nos dieron la beha Vior del siguiente código
var a;
console.log(a);
a = 'Hello World!';
no el comportamiento de
var a = 'Hello World!';
console.log(a);
que puede tener la impresión de la declaración de variables y funciones que se trasladó a la parte superior comunicado.
Pero JavaScript no está moviendo su código a ninguna parte. Necesita comprender el contexto de ejecución en JavaScript. Tiene dos fases de fase de creación y ejecución. En la fase de creación, el espacio de memoria se crea para estas variables y funciones, y las personas parecen confundir este paso con el izado. JavaScript no está moviendo su código a ninguna parte, lo que sucede es que JavaScript ha creado espacio de memoria para todo su código, es decir, variables y funciones, las funciones pueden colocarse completamente en la memoria pero en el caso de variables las asignaciones se procesan en la fase de ejecución del contexto de ejecución. Entonces, cuando var a = 'Hello World!'
, el motor de JavaScript conoce el valor de a
cuando comienza a ejecutarlo en la fase de ejecución del contexto de ejecución, por lo que pone un marcador de posición indefinido, y todas las variables se establecen inicialmente como indefinidas en JavaScript. Por lo tanto, no es bueno confiar en izar y ver indefinido. Por lo tanto, siempre es bueno declarar variables y funciones sobre tu código.
Tengo miedo, estoy confundido y algo intrigado ... ¿Qué intentas hacer? –
@Hahsen, intento entender varios errores de navegador y de JavaScript disponibles. Este es el izado variable y estoy tratando de entender su comportamiento en el alcance global junto con una declaración de devolución. Aunque no se permite el retorno cuando no está en la definición de la función, pero el código sigue funcionando en cromo y safari. Estoy tratando de averiguar el motivo – alter
Puede ser más fácil de entender como variable y declaración * preprocesamiento *. Las declaraciones no se mueven (ni se "levantan hacia arriba"), sino que se procesan antes de que se ejecute cualquier código. Lea ECMA-262 §10.3 sobre lo que sucede al ingresar a un contexto de ejecución, es razonablemente fácil de entender. – RobG