Ini adalah sesuatu yang mungkin Anda semua alami dengan putaran for
reguler Anda, seperti yang akan dihitung dari nol hingga sembilan
for[var i = 0; i < 10; i++] {
console.log[i];
}
Masalah yang muncul disini adalah dua hal
Pertama-tama, jika saya mengetik i
_ ke dalam konsol, ia mengembalikan 10
. Kami memiliki variabel global yang telah bocor ke jendela, atau ke lingkup induk, yang bukan sesuatu yang kami inginkan. Itu hanya nilai placeholder yang perlu kita kerjakan di dalam loop ini
Kedua, mungkin Anda memiliki sesuatu yang akan berjalan setelah beberapa saat, permintaan AJAX, atau, untuk kasus ini, saya akan menandainya dengan setTimeout[]
dan fungsi itu akan berjalan setelah satu detik
for[var i = 0; i < 10; i++] {
console.log[i];
setTimeout[function[] {
console.log['The number is ' + i];
},1000];
}
_Jika kita menjalankan ini, semuanya adalah 10. Alasan kami memilikinya adalah karena,
for[var i = 0; i < 10; i++] {
console.log[i];
setTimeout[function[] {
console.log['The number is ' + i];
},1000];
}
_0 akan segera berjalan dan mereferensikan apa pun i
. Itu berjalan segera pada for[var i = 0; i < 10; i++] {
console.log[i];
setTimeout[function[] {
console.log['The number is ' + i];
},1000];
}
_2 itu sendiriNamun, setelah satu detik, seluruh loop ini telah melalui setiap iterasi yang diperlukan dan variabel i
di sini sedang ditimpa setiap saat
Masalahnya adalah pada saat setTimeout[]
_ pertama berjalan, i
sudah di 10
, dan kami tidak memiliki cara untuk mereferensikannya
Jika Anda memiliki permintaan AJAX di mana Anda mengulangi beberapa di antaranya, tidak ada cara apa pun tanpa IFFE untuk mereferensikan apa variabel i
ketika dijalankan, bukan seperti saat ini setelah pengulangan
Salah satu cara cepat untuk memperbaikinya adalah dengan mengubah
for[var i = 0; i < 10; i++] {
console.log[i];
setTimeout[function[] {
console.log['The number is ' + i];
},1000];
}
8 menjadi let
for[let i = 0; i < 10; i++] {
console.log[i];
setTimeout[function[] {
console.log['The number is ' + i];
},1000];
}
Apa yang kita ketahui tentang let
? . Kami memiliki tanda kurung kurawal di loop for
. Jika Anda menjalankannya sekarang, setelah satu detik kami akan mencatat nol hingga sembilan. Kami tidak mendapatkan 10, 10 kali. Kami mendapatkannya seperti yang dinyatakan setiap saat
Sebagai catatan, Anda tidak dapat menggunakan const
untuk ini karena perlu ditimpa sendiri, dan Anda tidak dapat menetapkan variabel yang sama dua kali. Saat kita menggunakan let
, itu akan mencakup i
ke tanda kurung kurawal kita
Loop berguna, jika Anda ingin menjalankan kode yang sama berulang kali, setiap kali dengan nilai yang berbeda
Seringkali ini terjadi ketika bekerja dengan array
Alih-alih menulis
teks += mobil[0] + "
";
teks += mobil[1] + "
";
teks += mobil[2] + "
";
teks += mobil[3] + "
";
teks += mobil[4] + "
";
teks += mobil[5] + "
";
Kamu bisa menulis
untuk [misalkan i = 0; i < mobil. panjangnya;
teks += mobil[i] + "
";
}
Berbagai Jenis Loop
JavaScript mendukung berbagai jenis loop
for
_ - loop melalui blok kode beberapa kalifor/in
_ - loop melalui properti objekfor/of
- mengulang melalui nilai-nilai objek yang dapat diubahwhile
_ - loop melalui blok kode saat kondisi tertentu benardo/while
- juga mengulang blok kode saat kondisi tertentu benar
Untuk Loop
Pernyataan for
membuat loop dengan 3 ekspresi opsional
for [ekspresi 1; ekspresi 2; ekspresi 3] {
// blok kode yang akan dieksekusi
}
Ekspresi 1 dieksekusi [satu kali] sebelum eksekusi blok kode
Ekspresi 2 mendefinisikan kondisi untuk mengeksekusi blok kode
Ekspresi 3 dijalankan [setiap kali] setelah blok kode dieksekusi
Contoh
for [biarkan i = 0; i < 5; i++] {
teks += "Nomornya adalah " + i + "
";
}
Dari contoh di atas, Anda bisa membaca
Ekspresi 1 menyetel variabel sebelum perulangan dimulai [misalkan i = 0]
Ekspresi 2 mendefinisikan kondisi untuk menjalankan loop [saya harus kurang dari 5]
Ekspresi 3 meningkatkan nilai [i++] setiap kali blok kode dalam loop telah dieksekusi
Ekspresi 1
Biasanya Anda akan menggunakan ekspresi 1 untuk menginisialisasi variabel yang digunakan dalam loop [misalkan i = 0]
Ini tidak selalu terjadi. JavaScript tidak peduli. Ekspresi 1 adalah opsional
Anda dapat memulai banyak nilai dalam ekspresi 1 [dipisahkan dengan koma]
Contoh
untuk [misalkan i = 0, len = mobil. panjang, teks = "";
teks += mobil[i] + "
";
}
Dan Anda dapat menghilangkan ekspresi 1 [seperti saat nilai Anda ditetapkan sebelum loop dimulai]
Contoh
misalkan i = 2;
biarkan len = mobil. panjangnya;
biarkan teks = "";
untuk [; i < len; i++] {
teks += mobil[i] + "
";
}
Ekspresi 2
Seringkali ekspresi 2 digunakan untuk mengevaluasi kondisi variabel awal
Ini tidak selalu terjadi. JavaScript tidak peduli. Ekspresi 2 juga opsional
Jika ekspresi 2 mengembalikan true, pengulangan akan dimulai lagi. Jika mengembalikan false, loop akan berakhir
Jika Anda menghilangkan ekspresi 2, Anda harus memberikan jeda di dalam loop. Jika tidak, loop tidak akan pernah berakhir. Ini akan merusak browser Anda. Baca tentang istirahat di bab selanjutnya dari tutorial ini
Ekspresi 3
Seringkali ekspresi 3 menambah nilai variabel awal
Ini tidak selalu terjadi. JavaScript tidak peduli. Ekspresi 3 adalah opsional
Ekspresi 3 dapat melakukan apa saja seperti kenaikan negatif [i--], kenaikan positif [i = i + 15], atau yang lainnya
Ekspresi 3 juga dapat dihilangkan [seperti saat Anda menaikkan nilai di dalam loop]
Contoh
biarkan saya = 0;
biarkan len = mobil. panjangnya;
biarkan teks = "";
untuk [; i < len; ] {
teks += mobil[i] + "
";
saya++;
}
Lingkup Lingkaran
Menggunakan var
dalam satu lingkaran
Contoh
var i = 5;
untuk [var i = 0; i < 10; i++] {
// beberapa kode
}
// Ini aku 10
Cobalah sendiri "Menggunakan let
dalam satu lingkaran
Contoh
misalkan i = 5;
for [biarkan i = 0; i < 10; i++] {
// beberapa kode
}
// Ini aku 5
Cobalah sendiri "Pada contoh pertama, menggunakan var
, variabel yang dideklarasikan dalam loop mendeklarasikan ulang variabel di luar loop
Dalam contoh kedua, menggunakan let
, variabel yang dideklarasikan dalam loop tidak mendeklarasikan ulang variabel di luar loop
Ketika let
_ digunakan untuk mendeklarasikan variabel i dalam sebuah loop, variabel i hanya akan terlihat di dalam loop