He estado leyendo sobre el levantamiento de JavaScript hace algún tiempo.Entender el levantamiento de JavaScript y truthy & falsy
JavaScript Scoping and Hoisting by Ben Cherry
Two words about “hoisting” by Dmitry Soshnikov
y, un poco más sobre JavaScript tipo de coerción, la verdad & falsa prueba: Truth, Equality and JavaScript y algún otro recurso
Y mientras que la práctica de algunos, y se encontró que M FALTA algún concepto importante sobre el alzamiento y una variable 'truthy & falsy.
1: 'si' prueba de la verdad con la declaración de variable duplicado
var foo = 1;
function bar() {
if (!foo) {
alert('inside if');
var foo = 10;
}
}
bar();
O/P: inside if
Duda: valor 'foo' ser '1', if(!foo)
debe evalúa a false
y ese bloque no debe ejecutarse (citando los recursos anteriores: el desplazamiento afecta solo a la declaración var
& function
, pero no a la ejecución). Pero por qué se muestra esa alerta. Este no es el caso si uso directamente false
(se muestra en el siguiente no-tricks código: fragmento # 3)
2: 'si' prueba de verdad sin declaración de variable duplicado
var foo = 1;
function bar() {
if (!foo) {
alert('inside if');
}
}
bar();
O/P : sin salida; medio que no entró en el control 'si' bloque de
Esto es lo que se podría esperar
3: 'si' el uso de 'falso' con duplicado declaración de variables
var foo = 1;
function bar() {
if (false) {
alert('inside if');
var foo = 10;
}
}
bar();
O/P: sin salida; significa que el control no entró en el bloque 'si'
Esto es lo que uno podría esperar
Alguien aclare. Gracias
Mi mal. No me importó la función en absoluto. Solo me estoy concentrando en el tipo de coerción y izado (giran en mi cabeza). Si la declaración duplicada no está dentro de una función, entonces 'foo' tendrá el valor anterior (1) incluso después de la segunda declaración. Todo este pensamiento me hizo perder la función utilizada. Gracias por abrir mi ojo :) – manikanta
¿Por qué no funciona el número tres entonces? si una variable no está definida, ¿significa que es falsa? – bill