Maison  >  Questions et réponses  >  le corps du texte

Problème de fermeture JavaScript

**为什么在查找到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]());
滿天的星座滿天的星座2711 Il y a quelques jours459

répondre à tous(4)je répondrai

  • 怪我咯

    怪我咯2017-05-19 10:35:04

    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.

    répondre
    0
  • PHP中文网

    PHP中文网2017-05-19 10:35:04

    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]());

    répondre
    0
  • 高洛峰

    高洛峰2017-05-19 10:35:04

    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

    répondre
    0
  • PHP中文网

    PHP中文网2017-05-19 10:35:04

    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

    répondre
    0
  • Annulerrépondre