javascript - Je ne comprends pas cette question js
某草草
某草草 2017-05-19 10:44:12
0
9
656
function foo() {
    var i = 0;
    return function() {
        console.log(i++);
    }
}

var f1 = foo(), f2 = foo();
f1();
f1();
f2();

为什么结果是0, 1, 0而不是1, 2, 1呢
某草草
某草草

répondre à tous(9)
给我你的怀抱
console.log(i++)
// 相当于
console.log(i);
i = i+1;
console.log(++i)
// 相当于
i = i+1;
console.log(i);
过去多啦不再A梦

Pensez-vous que i est une variable globale ?
Puisque i est une variable locale, quelle est la relation entre i dans f1 et i dans f2 ?

Quant à savoir pourquoi c'est 0, 1 au lieu de 1, 2.
C'est parce que i++ est en fait i = i + 1;
console.log(i++), i est imprimé en premier, puis i = i + 1 est exécuté ;
Si vous le changez en console.log(++i); alors ce sera 1 ou 2.

小葫芦

C'est la différence entre i++ et ++i, i++ est d'abord cité puis incrémenté, ++i est d'abord incrémenté puis cité

PHPzhong
var a = 42;
a++; //42
a; //43

++a; //44
a; //44
漂亮男人

Lorsque f1 est exécuté pour la première fois, 0 est affiché Comme il s'agit de i++, i est affiché en premier, puis ajouté lorsqu'il est à nouveau exécuté, i est 1 à ce moment-là. Lorsque f2 est exécuté, parce que i vaut 0, 0 est affiché. C’est-à-dire que les portées de f1 et f2 sont différentes, donc les références de i sont également différentes.

習慣沉默

f1() est l'exécution

    function() {
        console.log(i++);
    }

Et i est la variable interne de f1 Après ++, elle affichera naturellement 0, 1

.

Vous pouvez le comprendre en ajoutant simplement une ligne à votre code

function foo() {
    var i = 0;
    console.log(i);
    return function() {
        console.log(i++);
    }
}

Le console.log nouvellement ajouté ne sera exécuté que lorsque var f1 = foo() et f1() ne seront pas exécutés

大家讲道理

i++ est d'abord arithmétique, puis addition et soustraction, donc il génère d'abord 0 puis passe à 1

阿神

Parce que ++ est un opérateur d'auto-addition post-opération. je serai incrémenté après avoir terminé cette instruction.

小葫芦

La raison de

0 est que console.log sera exécuté en premier, puis i sera incrémenté. Cependant, les i dans f1 et f2 ne sont pas connectés et, à cause de la fermeture, l'exécution de f1 obtiendra à nouveau 1.

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