Berbanding dengan bahasa lain, javascript ialah bahasa yang ditaip lemah Dalam bahasa lain seperti java, pelaksanaan program memerlukan peringkat penyusunan, dan terdapat "peringkat pra-penyusunan" yang serupa dalam javascript (pra-penyusunan javascript. -peringkat penyusunan). Penyusunan adalah berdasarkan blok kod
Pertama sekali, mari belajar tentang dua kaedah pengisytiharan dalam JavaScript, var dan fungsi Yang pertama mengisytiharkan pembolehubah, dan yang terakhir mengisytiharkan kaedah
Dalam pra-penyusunan, javascript membuat dua penyelesaian pemprosesan untuk dua pengisytiharan ini
<script> var a = "1"; //声明变量a function b(){ //声明方法b alert(); } var c = function(){ //声明变量c alert(); } </script>
Dalam blok kod di atas, a dan c ialah penugasan pembolehubah, dan b ialah perisytiharan fungsi Apabila kod di atas dilaksanakan, ia akan mula-mula memasuki peringkat pra-penyusunan Penetapan a dan c kepada pembolehubah akan membuka a ruang memori dalam memori dan Tuding pada nama pembolehubah, dan nilai yang diberikan tidak ditentukan
Untuk pengisytiharan fungsi, ruang memori juga akan diperuntukkan, tetapi objek yang ditetapkan akan memberikan fungsi yang diisytiharkan kepada nama fungsi
Fasa pra-penyusunan: (PS: Tanpa mengira susunan pembolehubah dan fungsi diisytiharkan dalam kod, pembolehubah akan diisytiharkan dahulu dan kemudian berfungsi dalam fasa pra-penyusunan)
<script> var a = undefined; var c = undefined; var b = function(){ alert(); } </script>
Fasa pelaksanaan:
<script> a = "1"; c = function(){ alert(); } </script>
Langkah pelaksanaan keseluruhan:
<script> var a = undefined; var c = undefined; var b = function(){ alert(); } a = "1"; c = function(){ alert(); } </script>
Tajuk:
<script> var a = "1"; function b(){ alert(a); var a = "2"; } b(); </script>
ps: pra-kompilasi javascript
1. Pratakrif pembolehubah dahulu, kemudian pratakrif fungsi
2. Pra-penyusunan pembolehubah hanya mengisytiharkannya, tidak memulakannya dan memulakannya semasa pelaksanaan
3. Fungsi yang ditakrifkan oleh pernyataan fungsi bukan sahaja mengisytiharkan nama fungsi, tetapi juga memproses badan fungsi
4. Fungsi tanpa nama tidak akan dikompilasi sebelumnya
function f(){ // 声明函数f return 1; } alert(f()); // 返回1 var f = function(){ // 定义匿名函数f return 2; } alert(f()); // 返回2
Pembolehubah f dipratakrifkan dahulu, dan kemudian fungsi f() dengan nama yang sama menimpa pembolehubah f, jadi 1 adalah output untuk kali pertama;
var f = function(){ // 定义匿名函数f return 1; } alert(f()); // 返回1 function f(){ // 声明函数f return 2; } alert(f()); // 返回1