Jika Anda tidak dapat memahami mekanisme berjalan dari bahasa JavaScript, atau sekedar, Anda tidak dapat menguasai urutan eksekusi JavaScript, maka Anda seperti bol sekitar.
Jadi bagaimana JavaScript parse? Apa perintah eksekusi? Sebelum kita memahami ini, mari kita pahami beberapa istilah penting terlebih dahulu:
1. Blok Kode
Blok kode dalam JavaScript mengacu pada segmen kode yang dibagi dengan tag <script>. Misalnya:
Salinan kode adalah sebagai berikut:
<type skrip = "Teks/JavaScript">
waspada ("Ini blok satu kode");
</script>
<type skrip = "Teks/JavaScript">
alert ("Ini blok kode dua");
</script>
JS disusun dan dieksekusi menurut blok kode. Apa artinya?
Salinan kode adalah sebagai berikut:
<type skrip = "Teks/JavaScript">
waspada (str); // karena str tidak didefinisikan, browser akan memiliki kesalahan, dan berikut ini tidak dapat berjalan
waspada ("Saya blok satu kode"); // tidak berjalan di sini
var test = "Saya adalah variabel blok kode";
</script>
<type skrip = "Teks/JavaScript">
Peringatan ("Saya Blok Dua");
waspada (tes); // popt "Saya adalah variabel blok kode"
</script>
Dalam kode di atas, kesalahan dilaporkan dalam blok kode satu, tetapi tidak mempengaruhi eksekusi blok kode dua. Ini adalah independensi antara blok kode. -Block berbagi.
2. Fungsi Deklaratif dan Fungsi Penugasan
Definisi fungsi dalam JS dibagi menjadi dua jenis: fungsi deklaratif dan fungsi penugasan.
Salinan kode adalah sebagai berikut:
<type skrip = "Teks/JavaScript">
fungsi fn () {// fungsi deklarasi
}
var fn = fungsi {// fungsi penugasan
}
</script>
Perbedaan antara fungsi deklaratif dan fungsi penugasan adalah bahwa selama periode prekompilasi JS, fungsi deklaratif akan diekstraksi terlebih dahulu, dan kemudian kode JS akan dieksekusi secara berurutan.
3. Periode Prekompilasi dan Periode Eksekusi
Faktanya, proses penguraian JS dibagi menjadi dua tahap: periode prekompilasi (preprocessing) dan periode eksekusi.
Selama periode prekompilasi, JS akan memproses semua variabel dan fungsi yang dinyatakan dalam blok kode ini (mirip dengan kompilasi C), tetapi harus dicatat bahwa pada saat ini, satu -satunya hal yang menangani fungsinya adalah deklaratif, dan variabelnya adalah hanya dinyatakan.
Salinan kode adalah sebagai berikut:
<type skrip = "Teks/JavaScript">
Fn (); // Hasil eksekusi: "Fungsi 2 dieksekusi", yang terakhir dari fungsi dengan nama yang sama akan mengesampingkan yang pertama
function fn () {// fungsi 1
alert ("Fungsi 1 dieksekusi");
}
function fn () {// fungsi 2
Peringatan ("Fungsi 2 dieksekusi");
}
</script>
<type skrip = "Teks/JavaScript">
FN (); // Hasil Eksekusi: "Fungsi deklaratif dieksekusi", fungsi tersebut dinyatakan dan diproses selama periode prekompilasi, jadi bahkan jika fungsi panggilan Fn () ditempatkan sebelum fungsi deklarasi dinyatakan.
fungsi fn () {// fungsi deklarasi
alert ("fungsi dinyatakan dieksekusi");
}
var fn = function () {// fungsi penugasan
peringatan ("Jalankan fungsi penugasan");
}
</script>
// Kode memblokir satu
<type skrip = "Teks/JavaScript">
waspada (str); // kesalahan browser dilaporkan, tetapi jendela informasi tidak muncul
</script>
// Kode blok dua
<type skrip = "Teks/JavaScript">
waspada (str); // jendela popt "tidak ditentukan"
var str = "aaa";
</script>
// JS menyatakan variabel selama periode preprocessing, tetapi tidak menginisialisasi dan menetapkan nilai, sehingga variabel dalam blok kode 2 tidak ada, sedangkan variabel dalam kode seseorang tidak ada sama sekali, sehingga browser melaporkan kesalahan.
Setelah memahami istilah -istilah di atas, saya yakin Anda memiliki kesan kasar dari mekanisme berjalan JS.
Salinan kode adalah sebagai berikut:
<type skrip = "Teks/JavaScript">
Fn (); // kesalahan browser: "tidak ditentukan"
</script>
<type skrip = "Teks/JavaScript">
function fn () {// fungsi 1
alert ("Fungsi 1 dieksekusi");
}
</script>
Mengapa browser melaporkan kesalahan saat menjalankan kode di atas? Bukankah fungsi deklarasi diproses selama periode preprocessing? Bahkan, ini adalah titik kesalahpahaman. kode.
Sekarang, mari kita ringkas dan atur:
Salinan kode adalah sebagai berikut:
Langkah 1. Baca blok kode pertama.
Langkah 2. Lakukan analisis sintaksis.
Langkah 3. Lakukan "pemrosesan prekompilasi" dari variabel var dan definisi fungsi (tidak akan pernah ada kesalahan yang dilaporkan karena hanya deklarasi yang benar yang diuraikan).
Langkah 4. Jalankan segmen kode, dan jika ada kesalahan, kesalahan akan dilaporkan (seperti variabel tidak ditentukan).
Langkah 5. Jika ada segmen kode lain, baca segmen kode berikutnya dan ulangi Langkah2.
Langkah6.
Menurut urutan eksekusi aliran dokumen HTML, kode JS yang perlu dieksekusi sebelum rendering elemen halaman harus ditempatkan di blok kode <script> sebelum <body>, dan JS setelah elemen halaman dimuat harus ditempatkan Di </body> setelah elemen, acara onload tag tubuh dieksekusi di akhir.
Salinan kode adalah sebagai berikut:
<type skrip = "Teks/JavaScript">
peringatan ("pertama");
fungsi fn () {
peringatan ("ketiga");
}
</script>
<body onload = "fn ()">
</body>
<type skrip = "Teks/JavaScript">
peringatan ("kedua");
</script>