Problème de fermeture JavaScript
滿天的星座
滿天的星座 2017-05-19 10:33:04
0
4
484
**为什么在查找到i的时候i变成了3;**

function outer(){
            for (var i = 0,arr=[];i<3;i++){
                arr[i] = function(){
                    return i;
                }                            
            }
            return arr;
        }
        var getNum = outer();
        console.log(getNum[0](),getNum[1](),getNum[2]());
滿天的星座
滿天的星座

répondre à tous(4)
刘奇

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.

Ty80

C'est en ce moment. Le problème de fermeture est résolu de la même manière

function outer(){
            for (var i = 0,arr=[];i<3;i++){
                arr[i] = (function(index){
                    return function() {
                        console.log(index)
                    };
                })(i)                   
            }
            return arr;
        }
        var getNum = outer();
        console.log(getNum[0](),getNum[1](),getNum[2]());
小葫芦

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

洪涛
function outer(){
    for (let i = 0,arr=[];i<3;i++){
        arr[i] = function(){
            return i;
        }                            
    }
    return arr;
}
var getNum = outer();
console.log(getNum[0](),getNum[1](),getNum[2]());

Le problème de la définition du domaine

var a changé pour laisser

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal