Lo que causó este problema es el resultado de la ejecución de un programa JS:
La copia del código es la siguiente:
var i = 0;
función a () {
para (i = 0; i <20; i ++) {
}
}
función b () {
para (i = 0; i <3; i ++) {
a();
}
regresar i;
}
resultado var = b ();
El resultado de este programa en ejecución es resultado = 21;
De este programa podemos ver que no hay problema de que el valor de I sea 20 cuando la función A regresa.
Cuando la función B regresa, vale la pena discutir si el valor de I es de 20 o 21 años.
La esencia del problema es: primero determinar si i <3 o i ++ se realiza primero y luego determine si i <3.
Según los resultados de la ejecución, se puede ver que I ++ se ejecutó primero.
La copia del código es la siguiente:
función a () {
para (i = 0; i <20; i ++) {
// no var i
// El yo aquí es la variable global a la que todos pueden acceder
}
}
función b () {
para (i = 0; i <3; i ++) {
// alerta (i); // Del mismo modo, yo también es una variable global, que regresa 0 y solo una vez regresa.
a (); // Esta función devuelve i = 20
// Cuando i = 20 pasa i ++ e i = 21, entonces no cumple con las condiciones de i <3 y sale directamente. ¡Así que return i = 21 esto es normal!
}
regresar i;
}
resultado var = b ();
Aquí completamos la orden de ejecución del bucle for:
El siguiente programa es un ejemplo
La copia del código es la siguiente:
para (int i = 0; i <10; i ++)
{
}
Primero realizar i = 0; i <10; Y luego realiza la primera ronda de cuerpo de bucle
Luego ejecute: i ++, i <10; luego ejecute la segunda ronda del cuerpo de bucle
Hasta el último i ++ después de i> = 10, el bucle termina.
Ahora mismo
La declaración 1 se ejecuta antes de que comience el bucle (bloque de código)
La declaración 2 define las condiciones para ejecutar un bucle (bloque de código)
La declaración 3 se ejecuta después de que se haya ejecutado el bucle (bloque de código)