Pensez-vous que i est une variable globale ? Puisque i est une variable locale, quelle est la relation entre i dans f1 et i dans f2 ?
Quant à savoir pourquoi c'est 0, 1 au lieu de 1, 2. C'est parce que i++ est en fait i = i + 1; console.log(i++), i est imprimé en premier, puis i = i + 1 est exécuté ; Si vous le changez en console.log(++i); alors ce sera 1 ou 2.
Lorsque f1 est exécuté pour la première fois, 0 est affiché Comme il s'agit de i++, i est affiché en premier, puis ajouté lorsqu'il est à nouveau exécuté, i est 1 à ce moment-là. Lorsque f2 est exécuté, parce que i vaut 0, 0 est affiché. C’est-à-dire que les portées de f1 et f2 sont différentes, donc les références de i sont également différentes.
0 est que console.log sera exécuté en premier, puis i sera incrémenté. Cependant, les i dans f1 et f2 ne sont pas connectés et, à cause de la fermeture, l'exécution de f1 obtiendra à nouveau 1.
Pensez-vous que i est une variable globale ?
Puisque i est une variable locale, quelle est la relation entre i dans f1 et i dans f2 ?
Quant à savoir pourquoi c'est 0, 1 au lieu de 1, 2.
C'est parce que i++ est en fait i = i + 1;
console.log(i++), i est imprimé en premier, puis i = i + 1 est exécuté ;
Si vous le changez en console.log(++i); alors ce sera 1 ou 2.
C'est la différence entre i++ et ++i, i++ est d'abord cité puis incrémenté, ++i est d'abord incrémenté puis cité
Lorsque f1 est exécuté pour la première fois, 0 est affiché Comme il s'agit de i++, i est affiché en premier, puis ajouté lorsqu'il est à nouveau exécuté, i est 1 à ce moment-là. Lorsque f2 est exécuté, parce que i vaut 0, 0 est affiché. C’est-à-dire que les portées de f1 et f2 sont différentes, donc les références de i sont également différentes.
f1() est l'exécution
Et i est la variable interne de f1 Après ++, elle affichera naturellement 0, 1
.Vous pouvez le comprendre en ajoutant simplement une ligne à votre code
Le console.log nouvellement ajouté ne sera exécuté que lorsque var f1 = foo() et f1() ne seront pas exécutés
i++
est d'abord arithmétique, puis addition et soustraction, donc il génère d'abord 0 puis passe à 1Parce que ++ est un opérateur d'auto-addition post-opération. je serai incrémenté après avoir terminé cette instruction.
La raison de
0 est que console.log sera exécuté en premier, puis i sera incrémenté. Cependant, les i dans f1 et f2 ne sont pas connectés et, à cause de la fermeture, l'exécution de f1 obtiendra à nouveau 1.