Cuándo y dónde deberíamos usar la elevación en Javascript [cerrado]

11

Soy nuevo en Javascript. Estoy aprendiendo el concepto de elevación en Javascript.
Basado en los tutoriales Javacsript en el sitio web de Mozilla , me encontré con esta palabra hoisting. De acuerdo con esos tutoriales, las variables en JavaScript es que puede hacer referencia a una variable declarada más tarde, sin obtener una excepción . Pero mi pregunta es en qué circunstancias es adecuado usar la elevación en un Javascript del lado del cliente o por qué deberíamos usar la elevación en Javascript. Cuales son sus ventajas.

Rudra
fuente
1
Compartir su investigación ayuda a todos. Cuéntanos qué has probado y por qué no satisfizo tus necesidades. Esto demuestra que te has tomado el tiempo para intentar ayudarte a ti mismo, nos salva de reiterar respuestas obvias y, sobre todo, te ayuda a obtener una respuesta más específica y relevante. También vea Cómo preguntar
mosquito
66
@gnat Después de toda la investigación, si hubiera entendido este tema, ¿por qué habría publicado esta pregunta aquí, para discutir y comprender el concepto correctamente
Rudra
2
@Rudra Este no es un foro de discusión . Además, no has mostrado ninguna prueba de que hayas investigado esto.
Doval
55
Sí, pero no es un requisito para hacer preguntas.
Robert Harvey
2
@ Rudra: Tenga en cuenta que no somos un foro de discusión. En realidad somos un sitio de preguntas y respuestas. Las preguntas que se hacen aquí deben tener un alcance razonable para responder dentro del formato de preguntas y respuestas.
Robert Harvey

Respuestas:

11

Nunca he escuchado el término "elevación" utilizado. Si se refiere a este uso de elevación por parte de Ben Cherry: http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html , entonces, por lo que puedo deducir, simplemente está haciendo eco de Douglas Crockford de Javascript: The Buenas partes , y decir que nunca debes usar el izado . Su afirmación al final es que todas las variables deben declararse en la parte superior de su función (como sugieren Crockford y JSLint).

O, en palabras del Sr. ChristopherBrown, no es una característica para usar , por decir, sino simplemente una peculiaridad relacionada con la forma en que el navegador interpreta Javascript.

En resumen: nunca y en ninguna parte .

David Cowden
fuente
1
Entonces, ¿por qué se incluye este concepto y de qué se trata esta característica?
Rudra
@Rudra: El subtema "Declaraciones, nombres y elevación" en el artículo que David enlazó parece cubrir esto bastante bien. ¿Qué parte no está clara?
Robert Harvey
@RobertHarvey Solo quiero saber dónde y cuándo usan esto. David dice que nunca se usa y en ninguna parte, pero ¿por qué se muestra como una característica
Rudra
44
El hecho de que algo sea una característica no significa que sea una buena idea. Hay muchas razones por las cuales las "características" caen en desgracia. Incluso su apéndice no sirve para ningún propósito aparentemente útil, aunque probablemente lo hizo en los días del hombre de las cavernas.
Robert Harvey
1
Izar es un término de la teoría del compilador, especialmente la optimización. Ha existido durante al menos 20 años, pero se hizo popular por esta peculiaridad de Javascript. Si no se llamara una característica, probablemente sería un error.
david.pfx
16

El levantamiento describe una característica de cómo el navegador interpreta Javascript, y no es tanto una característica para ser utilizada.

Al interpretar Javascript, los navegadores abarcan variables de nivel de función al comienzo de la función. Ejemplo:

function AddTwoAndTwo() {
    var two = 2;
    var result = two + two;
    return result;
}

En el código publicado, ambas variables "dos" y "resultado" existen al comienzo del alcance de la función (obviamente, como se declaran allí). Sin embargo, debido a que los navegadores están "alzando" las variables, lo siguiente se convierte en código JavaScript legal .

function AddTwoAndTwo() {
    result = 5;
    alert(result);
    var two = 2;
    var result = two + two;
    return result;
}

El efecto neto aquí es que tiene variables en uso antes de declararlas, y eso puede causar confusión, especialmente con las variables de alcance global. Ejemplo:

var result = 6;

function AddTwoAndTwo() {
    alert(result);  // should this be 6 or undefined?
    var two = 2;
    var result = two + two;
    return result;
}

Para evitar confusiones, declare sus variables en la parte superior de una función.

ChristopherBrown
fuente
44
+1: así es como respondería. No es una característica para usar o no usar, es solo una propiedad del medio ambiente a tener en cuenta.
scrwtp
1

¿Por qué?

JavaScript no tiene Block Scope , eso debería explicar por qué las cosas deberían elevarse a la cima.

¿Es útil?

Si prefieres esto:

var someVariable = someVariable || {};

En lugar de esto:

if ( "undefined" !== typeof someVariable ) {
    someVariable = someVariable;
} else {
    someVariable = {};
}

Entonces es útil. ¡Incluso si no lo notas!

Aclaracion

El primer ejemplo se traducirá en algo como esto:

var someVariable = someVariableValue;

if ( "undefined" !== typeof someVariable ) {
    var someVariableValue = someVariable;
} else {
    var someVariableValue = {};
}
Mahdi
fuente