Parce que votre fonction anonyme function(){return i;} n'est pas exécutée, i ici n'est pas défini, puis renvoie arr, c'est function(){return i;} stocké dans le tableau lorsque vous obtenezNum[0]( ) c'est quand ce qui précède for (var i = 0, arr=[];i<3;i++){} est exécuté, i=3 donc getNum[0](),getNum[1](),getNum[2 ] () affiche les 3.
Comme i est une variable périphérique, elle n'est trouvée que lors de l'appel. Et lorsque vous l'appelez, la boucle est terminée et la valeur de i est déjà 3, vous ne pouvez donc obtenir que 3
Parce que votre fonction anonyme function(){return i;} n'est pas exécutée, i ici n'est pas défini, puis renvoie arr, c'est function(){return i;} stocké dans le tableau lorsque vous obtenezNum[0]( ) c'est quand ce qui précède for (var i = 0, arr=[];i<3;i++){} est exécuté, i=3 donc getNum[0](),getNum[1](),getNum[2 ] () affiche les 3.
C'est en ce moment. Le problème de fermeture est résolu de la même manière
Comme i est une variable périphérique, elle n'est trouvée que lors de l'appel.
Et lorsque vous l'appelez, la boucle est terminée et la valeur de i est déjà 3, vous ne pouvez donc obtenir que 3
Le problème de la définition du domaine
var a changé pour laisser