recherche

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

portée de fermeture js

Pourquoi est-il émis 10 fois ? Le 10 inséré ne devrait-il pas être compris entre 1 et 9 ? Veuillez me donner une réponse à cet écueil 

function save_i(){
    var a = [];
    for(var i = 0;i<10;i++){
        a[i] = function(){
            return i;
        }
    }
    return a;   
}

var c = save_i();
for(var i = 0;i<10;i++){
   console.log(c[i]());
    //10次 10
}
扔个三星炸死你扔个三星炸死你2775 Il y a quelques jours795

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

  • 黄舟

    黄舟2017-06-28 09:30:39

    Il vous suffit de créer une fonction de fermeture pour enregistrer la valeur i lorsque la boucle for est exécutée, et elle peut être sortie dans l'ordre

    function save_i(){
        var a = [];
        for(var i = 0;i<10;i++){
            a[i] = function(i){
                return function() {
                    return i;
                };
            }(i);
        }
        return a;
    }
    
    var c = save_i();
    for(var i = 0;i<10;i++){
       console.log(c[i]());
        //已经变为依次输出
    }

    répondre
    0
  • 阿神

    阿神2017-06-28 09:30:39

    在执行点击事件之前,for循环已经执行完,也就是最终获取的是最后 i 的值5。  
    呆神:绑定 和 点击 是两个事件  点击是用户交互的时候发生  绑定在引擎编译代码的时候就发生了~             
    宇神:这样理解吧,你把点击事件当做一个下车事件,而火车从1-4,到4时你才能下车执行事件,此时值为4.

    Articles que j'ai lus dans le passé
    Comprendre les fermetures nécessite que vous ayez écrit un code et que vous puissiez ensuite l'utiliser dans votre propre code. À part cela, vous ne pouvez le mémoriser que par cœur.
    Les Chinois de la vieille école aiment laisser leurs enfants porter des choses quand ils sont très jeunes, mais ils ne savent pas ce que cela signifie et parfois ils ne peuvent pas l'expliquer clairement. Ils espèrent qu'ils le comprendront naturellement à un moment donné. futur
    Ce qui précède
    Si vous avez certaines connaissances de base. Il est recommandé de lire les journaux que j'ai écrits. Si vous ne comprenez toujours pas, laissez un message et demandez-moi
    http://user.qzone.qq. .com/2084...

    répondre
    0
  • 女神的闺蜜爱上我

    女神的闺蜜爱上我2017-06-28 09:30:39

    function save_i(){
        var a = [];
        for(var i = 0;i<10;i++){
            a[i] = function(i){
                return i;
            };
        }
        return a;   
    }
    
    var c = save_i();
    for(var i = 0;i<10;i++){
       console.log(c[i](i));
    }

    répondre
    0
  • 黄舟

    黄舟2017-06-28 09:30:39

     a[i] = function(i){
                return i;
            };

    Chaque i en retour fait référence au même i externe, qui vaut 10

    répondre
    0
  • 黄舟

    黄舟2017-06-28 09:30:39

    var fns=[];
    function test(){
        for(var i=0;i<10;i++){
            (function(j){
                fns.push(
                    function(){
                        console.log(j);
                    }
                );
        })(i);    
        
        }
    
    }
    
    test();
    
    for(var k=0;k<fns.length;k++){
        fns[k]();
    }
    

    La portée des variables var est la portée de la fonction, pas la portée au niveau du bloc

    répondre
    0
  • 天蓬老师

    天蓬老师2017-06-28 09:30:39

    La chaîne de portées a été générée lors de sa création. c[i] = function(i){ return i; };Lors de l'exécution, la portée actuelle n'a pas de i et le i de la portée supérieure save_i() est devenu 10. Pensez-vous que le résultat est 0~9 ? Pensez-vous que la portée supérieure est la portée globale ?

    répondre
    0
  • 黄舟

    黄舟2017-06-28 09:30:39

    a[i] est un ensemble de fonctions lorsqu'elles sont assignées, c'est-à-dire qu'il n'est pas exécuté, il n'obtient pas non plus i, et sa portée ne comprend pas non plus i

    Lorsque vous l'exécutez ci-dessous, ce groupe de fonctions commence à rechercher le i qui peut être obtenu dans leur propre portée, qui est le 10 après l'exécution de la boucle

    répondre
    0
  • 巴扎黑

    巴扎黑2017-06-28 09:30:39

    Le mot-clé

    var déclare que la portée de la variable est la portée de la fonction, donc la variable i dans la boucle for sera promue. Tout ira bien si l'affiche modifie la section de la boucle for en une fonction auto-exécutable. par exemple :
    fonction save_i(){

    var a = [],
        i = 0;
    for(;i<10;i++){
        a[i] = function(i){
            return i;
        }(i);
    }
    return a;

    }

    répondre
    0
  • Annulerrépondre