javascript - L'impression de boucle for que j'ai mentionnée dans la commande let dans l'introduction à la norme ES6 est 10. Comment la remplacer sans let?
阿神
阿神 2017-06-28 09:22:57
0
4
863

Récemment, je lisais l'Introduction aux normes ES du professeur Ruan Yifeng, et quand j'ai lu le premier chapitre, j'ai mentionné un morceau de code

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

Utiliser let ici peut résoudre ce problème, mais que se passe-t-il si nous utilisons la méthode ES5 ? IIFE peut le faire, mais il l'imprime immédiatement.

阿神
阿神

闭关修行中......

répondre à tous(4)
扔个三星炸死你
var a = [];
            for(var i = 0; i < 10; i++) {
                +function(i){
                    a[i] = function() {
                        console.log(i);
                    }
                }(i);
            };
a[6](); // 6

Problème de fermeture

巴扎黑

Vous pouvez utiliser des attributs personnalisés
var a = [];
for (var i = 0; i < 10; i++) {

  var a[i].n = i;//自定义一个属性  n 
  a[i] = function () {
    console.log(this.n);
  };

}
a[6](); // 6

曾经蜡笔没有小新

Cela n'a rien à voir avec quoi que ce soit. Je pense que la personne qui pose la question veut afficher 6, n'est-ce pas ? let

Mais la question que vous avez posée ne semble absolument pas pertinente par rapport à ce que vous voulez. Je veux vous aider à modifier la description de la question mais je suis un peu impuissant...

Il s'agit en fait d'un problème de fermeture. Principalement, analysons d'abord pourquoi 10 est affiché :

var a = [];
for(var i = 0; i < 10; i++) {
    a[i] = function () {
        console.log(i);
    };
}
a[6](); // 10
La valeur de

est 10, donc 10 est la sortie. for里面的i的作用于是整个外部区域,所以,当调用a[6]()的时候,其实运行的是console.log(i),而此时因为跑完循环,i

Quant à ce que l'interrogateur a dit,

peut être résolu car les variables déclarées par let可以解决,是因为,for里面,let声明的变量,作用于只在for内部,所以,不会因为循环跑完而使得idans for ne fonctionnent qu'à l'intérieur de for, elles ne s'exécuteront donc pas à cause des boucles. i égal à 10 dans la portée globale.

En fait, ce que cette question examine réellement devrait être la clôture.

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

Le rôle de la fermeture est similaire au rôle précédent de let, qui est d'isoler les variables locales les unes des autres sans contaminer les valeurs des variables externes. Chaque fermeture est une zone indépendante, et les paramètres de fermeture ne sont utilisés qu'à l'intérieur de la fermeture, donc. le résultat de la sortie 6 peut également être obtenu.

Peter_Zhu

Vous pouvez utiliser des fermetures
http://www.softwhy.com/articl...
La seconde moitié de cet article a déjà expliqué vos questions

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!