javascript - Saya tidak dapat memahami soalan js ini
某草草
某草草 2017-05-19 10:44:12
0
9
653
function foo() {
    var i = 0;
    return function() {
        console.log(i++);
    }
}

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

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

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

Adakah anda fikir saya adalah pembolehubah global?
Memandangkan i ialah pembolehubah tempatan, apakah hubungan antara i dalam f1 dan i dalam f2?

Mengapa ia adalah 0, 1 bukannya 1, 2.
Itu kerana i++ sebenarnya i = i + 1;
console.log(i++), i dicetak dahulu, dan kemudian i = i + 1 dilaksanakan ;
Jika anda menukarnya kepada console.log(++i); maka ia akan menjadi 1 atau 2.

小葫芦

Ini adalah perbezaan antara i++ dan ++i, i++ dipetik dahulu dan kemudian dinaikkan, ++i mula-mula dinaikkan dan kemudian dipetik

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

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

Apabila f1 dilaksanakan buat kali pertama, 0 adalah output Kerana ia adalah i++, i adalah output dahulu dan kemudian ditambah Apabila dilaksanakan semula, i adalah 1 pada masa ini. Apabila f2 dilaksanakan, kerana i ialah 0, 0 ialah output. Maksudnya, skop f1 dan f2 adalah berbeza, jadi rujukan i juga berbeza.

習慣沉默

f1() ialah pelaksanaan

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

Dan i ialah pembolehubah dalaman f1 Selepas ++, ia secara semula jadi akan mengeluarkan 0, 1

Anda boleh memahaminya dengan hanya menambah satu baris pada kod anda

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

Consol.log yang baru ditambah hanya akan dilaksanakan apabila var f1 = foo() dan f1() tidak akan dilaksanakan

大家讲道理

i++ ialah aritmetik dahulu dan kemudian tambah dan tolak, jadi ia mengeluarkan 0 dahulu dan kemudian bertukar kepada 1

阿神

Kerana ++ ialah pengendali tambah sendiri selepas operasi. saya akan dinaikkan selepas melengkapkan arahan ini.

小葫芦

Sebab untuk

0 ialah console.log akan dilaksanakan terlebih dahulu dan kemudian i akan dinaikkan, bagaimanapun, i dalam f1 dan f2 tidak disambungkan, dan kerana penutupan, melaksanakan f1 sekali lagi akan mendapat 1.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan