Dalam C dan Java, terdapat fungsi atau kaedah kemasukan untuk atur cara iaitu fungsi utama atau kaedah utama. Dalam JavaScript, program mula berjalan dari kepala fail sumber JS. Tetapi dari satu segi, kita masih boleh menjadikan fungsi utama sebagai titik permulaan program Dengan cara ini, ia bukan sahaja boleh disatukan dengan bahasa lain, tetapi mungkin anda akan mempunyai pemahaman yang lebih mendalam tentang JS.
1. Pintu masuk sebenar
Apabila fail JavaScript diserahkan kepada enjin JS untuk dilaksanakan, enjin JS melaksanakan setiap pernyataan satu demi satu dari atas ke bawah sehingga semua kod dilaksanakan.
2. Rangkaian skop, skop global dan objek global
Kami tahu bahawa setiap fungsi dalam JS akan mencipta skop baharu apabila dilaksanakan. Khususnya, skop baharu akan dibuat apabila proses pelaksanaan memasuki fungsi, dan skop ini akan dimusnahkan apabila pelaksanaan fungsi selesai dan keluar. Parameter formal dan pembolehubah tempatan fungsi akan terikat pada skop ini Apabila panggilan fungsi melengkapkan pemusnahan skop, ia akan dimusnahkan dengan sewajarnya. Sudah tentu, dalam kes khas, jika beberapa pembolehubah dalam skop masih dirujuk apabila fungsi kembali, skop dan pembolehubah yang dirujuk ini tidak akan dimusnahkan, membentuk penutupan yang dipanggil.
Sebaliknya, kita tahu bahawa fungsi boleh bersarang, jadi skop juga boleh bersarang. Apabila fungsi ditakrifkan, enjin JS akan menetapkan atribut terbina dalam yang dipanggil [[skop]] untuk setiap fungsi, yang menunjuk kepada skop leksikal fungsi luaran. Dengan cara ini, berbilang skop membentuk struktur rantai yang dipanggil rantai skop. Biasanya, hanya terdapat satu rantai skop pada bila-bila masa, iaitu, bermula dari skop fungsi pelaksana dan menjejak lapisan atas demi lapisan sehingga skop global paling luar.
[Nota]: Fungsi pada rantai skop ialah fungsi bersarang lapisan demi lapisan dalam kod sumber JS ia tidak ada kaitan dengan susunan fungsi tersebut dilaksanakan atau timbunan panggilan fungsi asal usul skop leksikal nama.
Skop global ialah skop khas Ia bukan skop fungsi, tetapi ia adalah skop luar semua skop fungsi dan titik akhir semua rantai skop. Oleh itu, selagi program tidak keluar, skop global sentiasa wujud, dan pembolehubah dalam skop global sentiasa sah.
[Skop fungsi 3]-->[Skop fungsi 2]-->[Skop fungsi 3]-->[Skop global]
Selain itu, sepadan dengan skop global, terdapat objek global. Dalam pelayar, objek global ialah objek tetingkap. Objek global ialah objek khas:
Pembolehubah yang ditakrifkan dalam skop global akan terikat pada objek global.
Pembolehubah yang ditakrifkan dalam mana-mana skop, jika ditakrifkan tanpa kata kunci var, akan terikat pada objek global.
Dalam skop global, ini menunjuk kepada objek global.
Dapat dilihat daripada ciri-ciri yang disenaraikan di atas bahawa jika skop global dianggap sebagai objek, maka ia sebenarnya adalah objek global. Di samping itu, ini juga menjelaskan mengapa empat pernyataan berikut adalah setara dalam skop global:
var a = 1; a = 1; window.a = 1; this.a = 1;
3. Fungsi utama khayalan
Memandangkan semuanya adalah skop, mengapa kita memerlukan skop global khas? Kami sentiasa mengutamakan kesederhanaan dan konsistensi dan cuba mengelakkan kerumitan dan kekhususan. Jadi secara semulajadi, kita tertanya-tanya sama ada kita boleh menjadikan skop global kelihatan sama dengan skop fungsi? Jawapannya ya. Kita boleh fikirkan ini:
Kami membayangkan bahawa apabila enjin JS melaksanakan fail sumber, ia akan membungkus kod dalam fail ke dalam fungsi yang dipanggil utama. Kemudian gunakan fungsi utama ini sebagai titik masuk program.
Iaitu, katakan terdapat kod seperti ini dalam fail JS:
var a = 1; var b = 2; function add(x, y) { var z = x + y; return z; } console.log(add(a, b));
Enjin JS akan membungkus atur cara menjadi fungsi utama sebelum ia mula melaksanakan:
// 虚构的main函数 function main() { var a = 1; var b = 2; function add(x, y) { var z = x + y; return z; } console.log(add(a, b)); }
Kemudian, panggil fungsi utama ini:
main._current_scope_ = window; // 将全局作用域(对象)设为window main.call(window) // 将this指向window
4. Apakah kepentingannya?
(1) JS juga mempunyai fungsi masuk utama, yang konsisten dengan bahasa lain.
(2) Konsep skop global diabaikan, atau skop global menjadi skop fungsi.
(3) Melalui proses panggilan fungsi utama di atas, kita dapat memahami asal usul sifat istimewa dalam skop global.
(4) Perkara terakhir adalah untuk menganggap semua kod sumber JS sebagai fungsi untuk membuka laluan kepada baris gilir acara dan gelung acara kemudian.
Di atas adalah nota kajian JavaScript (3) yang diperkenalkan oleh editor kepada anda: JavaScript juga mempunyai fungsi utama pintu masuk, saya harap anda menyukainya.