Mi primera pregunta: javascript toma declaraciones y las coloca en la parte superior del código de la función debido a la elevación antes de que se ejecute cualquier código, quiero saber que en esta situación que expuse a continuación, hay dos variables declaradas que están escritas así var a, a; ? debido a izar en la parte superior del código de función? si es así, por qué no estoy accediendo a la segunda variable a antes de la inicialización, por qué estoy accediendo a la primera variable a después de la inicialización, en resumen, en la línea 4 del código de función console.log (a) // 10 cómo javascript decide dar 10 y no indefinido, Tenga en cuenta que hay dos variables declaradas con el mismo nombre en la parte superior.
Mi segunda pregunta: es posible cuando javascript escanea el código y encuentra 2 variables con el mismo nombre y elimina una variable y usa otra en la ejecución del código.
function myFunc() { console.log(a); var a = 10; console.log(a); var a = 20; console.log(a); } myFunc();Pregunta 1: "¿Se declaran dos variables cuando se escriben así:
var a, a;Respuesta 1: no.
El código fuente de JavaScript se escanea antes de la ejecución y, en modo descuidado , cualquier cantidad de declaraciones del mismo identificador (' a ' en este caso) como una variable que usa la palabra clave var se fusionan y se elevan como una sola declaración de variable en la parte superior de la función (o elemento de secuencia de comandos en el caso de variables de nivel superior en un archivo de secuencia de comandos o elemento en línea).
Las funciones con nombre declaradas con la palabra clave function también se elevan a la parte superior de una función o elemento de script adjunto con algunas diferencias:
Pregunta 2 ¿Es posible que cuando el motor Javascript escanea el código y encuentra 2 variables con el mismo nombre, elimine una variable y use la otra en la ejecución del código?
Respuesta 2: Sí
Para repetirlo un poco, el motor de JavaScript no encuentra dos variables, encuentra dos declaraciones de variables que, cuando se elevan, solo dan como resultado un enlace único del nombre de la variable a donde está almacenado en la memoria, lo que significa que solo se crea una variable.
var se elevan a la parte superior de la función.var se manejan por separado de las asignaciones.Su código es esencialmente el mismo que:
function myFunc() { var a; // Declaration is hoisted console.log(a); a = 10; // Assignment is not console.log(a); a = 20; // Second assignment is also not console.log(a); } var es claramente poco intuitivo, por lo que el código moderno lo evita a favor de const y, ocasionalmente, let .