Rumah  >  Artikel  >  hujung hadapan web  >  Bercakap tentang pemahaman saya tentang prototaip JavaScript dan siri penutupan (nota rawak 9)_kemahiran javascript

Bercakap tentang pemahaman saya tentang prototaip JavaScript dan siri penutupan (nota rawak 9)_kemahiran javascript

WBOY
WBOYasal
2016-05-16 15:23:431206semak imbas

Bacaan berkaitan: Bercakap tentang pemahaman saya tentang prototaip JavaScript dan siri penutupan (Shuishou Note 6)

Skop

Memetik definisi skop daripada "Intipati Bahasa JavaScript dan Amalan Pengaturcaraan":


Skop pembolehubah juga dipanggil keterlihatan pembolehubah. Skop pembolehubah melengkapkan penyembunyian maklumat, iaitu menyelesaikan masalah "pemecahan".


Tiada skop peringkat blok dalam js (ada let dalam ES6, yang boleh diisytiharkan dalam {}, jika, dan untuk, dan skop terhad kepada tahap blok. Tiada promosi pembolehubah untuk pembolehubah diisytiharkan oleh let! Kami tidak akan bercakap mengenainya di sini Ini, kerana saya melihatnya secara kebetulan).


Apabila kita menulis kod, kita tidak sepatutnya mengisytiharkan pembolehubah dalam "blok". Kita harus mengisytiharkannya pada permulaan kod untuk mengelakkan kekaburan.

 for(var i = 0; i < 10; i++) { //不好的声明方式
 //...
}
console.log(i);
/*----------------------------------------------*/
var i = 0; //好的声明方式
for(i = 0; i < 10; i++) {
 //....
}
console.log(i); 
Selain skop global, JavaScript juga mempunyai skop fungsi.

Apabila kami mengisytiharkan pembolehubah, kod global diisytiharkan di bahagian hadapan, dan pembolehubah yang diisytiharkan dalam fungsi mesti diisytiharkan di hadapan badan fungsi. Pada masa yang sama, pengendali "var" mesti digunakan semasa mengisytiharkan pembolehubah.

 var a = 10,  //全局作用域
 b = 20;
function fn() { //fn函数作用域
 var a = 100,
  c = 300;
 function bar() { //bar函数作用域
  var a = 1000,
   d = 4000;
 }
} 
Kod global, fungsi fn dan fungsi bar semuanya akan membentuk skop. Skop mempunyai hubungan atasan-bawahan, dan hubungan atasan-bawahan bergantung pada skop di mana fungsi itu dicipta. Fungsi bar dicipta di bawah skop fungsi fn "skop fungsi fn" adalah unggul daripada "skop fungsi bar".


Penggunaan skop terbesar adalah untuk mengasingkan pembolehubah dengan nama yang sama dalam skop yang berbeza tidak akan bercanggah


------------------------------------------------ --- -----------------------------------

Skop ditentukan apabila fungsi ditakrifkan, bukan apabila fungsi dipanggil.


1. Persekitaran konteks global telah ditentukan apabila program dimuatkan, dan pembolehubah diberikan nilai semasa program dilaksanakan.


2. Jalankan ke baris 36, panggil fn(10), buat konteks pelaksanaan fungsi fn, tolak tindanan dan tetapkan konteks ini kepada keadaan aktif.



3. Laksanakan ke baris 32, panggil bar(100), buat konteks pelaksanaan fungsi bar(100), tolak tindanan dan tetapkan konteks ini kepada keadaan aktif.


4. Selepas bar(100) dipanggil, ia muncul dari timbunan dan konteks fungsi bar(100) dimusnahkan. Kemudian laksanakan baris 33, bar panggilan(200), cipta konteks pelaksanaan fungsi bar(200), tolak tindanan, dan tetapkan konteks ini kepada keadaan aktif.


5 Selepas panggilan ke bar(200) selesai, ia dikeluarkan dari timbunan dan konteksnya dimusnahkan. Kawalan kini diserahkan kepada konteks fn(10), yang menjadi aktif semula.


6 Pada masa ini, fn(10) dipanggil, muncul dari timbunan, dan konteksnya dimusnahkan. Kawalan dipindahkan ke konteks pelaksanaan global.


Proses pelaksanaan sekeping kod ini selesai pada ketika ini.


Kemudian pinjam gambar lengkap daripada pengarang asal:

Ringkasan:

Skop hanyalah "turf", dan nilai pembolehubah mesti diperoleh melalui konteks pelaksanaan yang sepadan dengan skop. Dalam skop yang sama, panggilan yang berbeza akan menghasilkan konteks pelaksanaan yang berbeza, dan dengan itu nilai pembolehubah yang berbeza. Oleh itu, nilai pembolehubah dalam skop ditentukan semasa pelaksanaan, tetapi skop ditentukan apabila fungsi dicipta. Oleh itu, jika anda ingin mencari nilai pembolehubah dalam skop, anda perlu mencari konteks pelaksanaan yang sepadan dengan skop ini, dan kemudian cari nilai pembolehubah di dalamnya.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn