Apa yang menyebabkan masalah ini adalah hasil dari menjalankan program JS:
Salinan kode adalah sebagai berikut:
var i = 0;
fungsi a () {
untuk (i = 0; i <20; i ++) {
}
}
fungsi b () {
untuk (i = 0; i <3; i ++) {
A();
}
Kembalikan i;
}
var hasil = b ();
Hasil dari program ini berjalan adalah hasil = 21;
Dari program ini kita dapat melihat bahwa tidak ada masalah bahwa nilai I adalah 20 ketika fungsi A kembali.
Ketika fungsi B kembali, ada baiknya membahas apakah nilai i adalah 20 atau 21.
Inti dari masalahnya adalah: pertama -tama tentukan apakah saya <3 atau i ++ dilakukan terlebih dahulu, dan kemudian menentukan apakah saya <3.
Menurut hasil eksekusi, dapat dilihat bahwa i ++ dieksekusi terlebih dahulu.
Salinan kode adalah sebagai berikut:
fungsi a () {
untuk (i = 0; i <20; i ++) {
// tidak var i
// I di sini adalah variabel global yang dapat diakses semua orang
}
}
fungsi b () {
untuk (i = 0; i <3; i ++) {
// alert (i); // Demikian pula, saya di sini juga variabel global, kembali 0 dan hanya sekali pengembalian
a (); // fungsi ini mengembalikan i = 20
// Ketika i = 20 melewati i ++ dan i = 21, maka itu tidak memenuhi persyaratan i <3 dan keluar secara langsung. Jadi kembalikan i = 21 ini normal!
}
Kembalikan i;
}
var hasil = b ();
Di sini kami menyelesaikan urutan eksekusi loop untuk:
Prosedur berikut adalah contohnya
Salinan kode adalah sebagai berikut:
untuk (int i = 0; i <10; i ++)
{
}
Performa pertama i = 0; i <10; dan kemudian lakukan putaran pertama loop body
Lalu jalankan: i ++, i <10; Kemudian jalankan putaran kedua loop body
Sampai i ++ terakhir setelah i> = 10, loop berakhir.
Sekarang
Pernyataan 1 dijalankan sebelum loop (blok kode) dimulai
Pernyataan 2 mendefinisikan kondisi untuk menjalankan loop (blok kode)
Pernyataan 3 dieksekusi setelah loop (blok kode) telah dieksekusi