javascript es6: preguntas clásicas de entrevista (var y let)

fueron los siguientes:

	var arr = [];

		for (var i = 0; i < 2; i++) {
			arr[i] = function () {
				console.log(i);
			}
		}
		arr[0]();
		arr[1]();

Salida:

2
2


Análisis:
Inserte la descripción de la imagen aquí
La función dentro del bucle for nunca se ejecuta.

Cuando se ejecuta la función, no puede encontrar su propio valor de la variable i en su propio alcance. De acuerdo con el principio de búsqueda de la cadena del alcance, es necesario buscar en el alcance de la capa superior (es decir, el alcance global). Hay una variable i en el alcance global, Cuando se ejecuta la función, el bucle ya se ha ejecutado. Cuando i = 2, el ciclo se completa, la i impresa es una variable global, por lo que la salida de ambas funciones esVariable global iValor de 2

El punto clave de este problema es que la variable i es global, y la salida de la función cuando se ejecuta la función es el valor de i bajo la acción global.


dejar:

 let arr = [];

        for (let i = 0; i < 2; i++) {
            arr[i] = function() {
                console.log(i);
            }
        }
        arr[0]();
        arr[1]();

Salida:

0
1


Análisis:

Inserte la descripción de la imagen aquí
Dado que la variable que declaró con let tiene un ámbito de nivel de bloque, se generan dos ámbitos de nivel de bloque después del final del ciclo.

Los dos ámbitos de nivel de bloque generados tienen sus propias variables i. Estas son dos variables, que no se afectan entre sí, porque en diferentes ámbitos de nivel de bloque, dos variables i todavía se almacenan en la matriz una vez que finaliza el ciclo. Durante la ejecución, todavía no hay una variable propia i, y todavía tenemos que buscar el alcance de nivel superior. En el código actual, el alcance de nivel superior de la función es en realidad el alcance de nivel de bloque generado por el bucle, por lo que las dos funciones de matriz deben ejecutarse. Encuentre el valor de i en el ámbito de nivel de bloque correspondiente.

El punto clave de este problema es que cada bucle generará un alcance a nivel de bloque. Las variables en cada alcance a nivel de bloque son diferentes. Cuando se ejecuta la función, genera su propio alcance de nivel superior (alcance a nivel de bloque generado por el bucle). Bajo valor

Publicado 28 artículos originales · elogiado 7 · visitas 1169

Supongo que te gusta

Origin blog.csdn.net/haduwi/article/details/105568610
Recomendado
Clasificación