Kami tahu bahawa pengisytiharan pembolehubah akan dinaikkan pangkat:
var a = 1;
//上面一行相当于下面这样:
var a;
a = 1;
Pada masa yang sama, pengisytiharan fungsi juga akan dipromosikan:
foo();
function foo(){};
//上面两行相当于下面这样:
var foo;
foo = function (){};
foo()
Jadi, apabila terdapat pengisytiharan pembolehubah dan fungsi, siapa yang akan naik ke atas? Bagaimana untuk menyusun? Contohnya:
var a = 1;
foo();
function foo(){};
Begitukah?
var a;
var foo;
a = 1;
foo = function(){};
foo();
Kerana saya melihat ayat ini dalam "JAVASCRIPT You Don't Know" dan saya agak keliru:
Pengisytiharan fungsi dan pengisytiharan berubah-ubah akan dinaikkan pangkat. Tetapi perincian yang perlu diberi perhatian ialah fungsi dipromosikan terlebih dahulu, kemudian pembolehubah. Pengisytiharan fungsi dinaikkan sebelum pembolehubah biasa.
Jadi ia akan disusun seperti ini:
var foo;
foo = function(){};
var a;
a = 1;
foo();
Cari peraturan pengisihan, terima kasih!
Pernyataan "naik pangkat dulu" ini sebenarnya disalah ertikan. Spesifikasi tidak dalam susunan tertentu (jika anda berminat dengan pelaksanaan V8, anda boleh membaca di sini).
var
的提升是声明跟赋值分开,function
Penambahbaikan ialah keseluruhan penambahbaikan, jadiakan menjadi seperti ini
Jadi ada kesan fungsi yang dipromosikan dahulu.
Pertama sekali, kita boleh bahagikan kepada 4 isi kandungan
Kami ingin tahu bagaimana rupa format pengisihan selepas promosi?
Syarat semasa yang diketahui ialah pengisytiharan pembolehubah akan dinaikkan pangkat kepada sebelum penugasan pembolehubah, jadi kita boleh meletakkan perisytiharan pembolehubah dalam dua digit pertama dahulu, tanpa mengira susunan dalamannya buat masa ini:
Seterusnya, mari tentukan susunan dalaman modul pengisytiharan dan tugasan masing-masing.
Untuk menjalankan eksperimen, kami mengembangkan fungsi foo, jadi susunan semasa ialah:
Jangan risau mengapa kami mengubahnya seperti ini. Kami akan memahaminya semasa percubaan.
Untuk memudahkan pemahaman, eksperimen dijalankan dalam dua kali.
Pertama: kami bereksperimen dengan modul pengisytiharan berubah-ubah.
Kemudian: kami bereksperimen dengan modul tugasan boleh ubah.
Jom buat eksperimen:
Berdasarkan keputusan percubaan, keputusan ranking terakhir kami ialah: