variable de bucle JS fuera de alcance


Ver el siguiente código

var li = document.querySelectorAll('li');
for(var i = 0; i<10; ++i){
li[i].oncilck=function(){
console.log(i);//无论点击哪个li都会输出10
}
}

¿Por qué es esto así?
Esto se debe a que los controladores de temporizador y eventos, así como las devoluciones de llamada de Ajax, tareas asíncronas pertenecen
ejecución de la tarea asíncrona que no está en la línea principal Cheng Zhongli, pero en la cola de tareas, por lo que si las tareas asíncronas en un bucle for y tareas variables de asíncronos utilizados en el ciclo de función, cuando la tarea asíncrona eliminado de la cola de ejecución de la tarea, el ciclo ya completado, la variable de bucle ha superado el valor ideal, lo que resulta en errores

Luego está la cuestión de por qué la variable de bucle también se puede acceder fuera del bucle? Mira aquí .

soluciones

1. Los cierres

var li = document.querySelectorAll('li');
for(var i = 0; i<10; ++i){
	(function(i){
		li[i].oncilck=function(){
		console.log(i);
	})(i)

}
}

Cada vez que el ciclo de ejecución, la corriente i se pasarán como argumentos para ejecutar la función de inmediato, esta vez, el controlador de eventos más interna no es para la variable de bucle i bucle for i, pero la ejecución inmediata de la función parámetro i (cuando se ejecuta la función de acceso interno para la variable de bucle, de inmediato reemplazar los parámetros de la función, y el controlador de eventos no se desencadena, a continuación, ejecutar inmediatamente la función no puede ser ejecutado, las variables locales no se escribirá apagado)

2. Deje que la declaración de variables de bucle

En otro artículo escrito con gran detalle .

variables declaradas permiten palabra clave que tiene el alcance a nivel de bloque, las variables var declarada propiedades no tienen alcance a nivel de bloque.

for(let i = 0; i<10; ++i){
}
console.log(i);//not defined

Usar la palabra clave let para declarar la variable de bucle en el bucle se puede prevenir a través de la mala al final, todavía se puede acceder

Publicado ocho artículos originales · ganado elogios 0 · Vistas 116

Supongo que te gusta

Origin blog.csdn.net/qq_43915356/article/details/105176267
Recomendado
Clasificación