Rumah  >  Artikel  >  hujung hadapan web  >  Pengenalan kepada skop pembolehubah dalam petua JavaScript_javascript

Pengenalan kepada skop pembolehubah dalam petua JavaScript_javascript

WBOY
WBOYasal
2016-05-16 16:22:571350semak imbas

Untuk skop pembolehubah, bahasa seperti C dan Java menggunakan kaedah "skop blok". Berbeza dengan ini, JavaScript menggunakan pendekatan "skop fungsi" - skop pembolehubah hanya ditentukan oleh fungsi yang terletak di dalamnya, dan tiada kaitan dengan blok logik seperti jika dan untuk. Contohnya, contoh berikut menunjukkan gelagat dalam JavaScript yang berbeza daripada C, Java dan bahasa lain:

Salin kod Kod adalah seperti berikut:

fungsi(){
var s = 42;//s boleh dilihat sepanjang fungsi
jika (s > 3) {
var x = "ujian";//x kelihatan di seluruh fungsi
untuk(var i=0; i<10; i ){
console.log(i);
}
console.log(i);//i boleh dilihat sepanjang fungsi
}
console.log(i);
console.log(x);
}

Dalam bahasa "skop blok" seperti C dan Java, selepas blok logik seperti pernyataan if dan untuk pernyataan berakhir, pembolehubah yang ditakrifkan dalam blok logik ini akan dimusnahkan. JavaScript adalah berbeza selagi pembolehubah ditakrifkan dalam fungsi, semua kod dalam keseluruhan fungsi boleh mengakses pembolehubah, walaupun kod ini sebelum pembolehubah ditakrifkan:

Salin kod Kod adalah seperti berikut:

fungsi(){
console.log(a);//undefined
var a = "ujian";
console.log(a);//test
}

Dalam contoh di atas, jika fungsi dalam tidak pernah ditakrifkan, console.log(a) akan membuang ReferenceError. Apabila a ditakrifkan dalam fungsi, walaupun definisi adalah selepas pernyataan panggilan pembolehubah, panggilan kepada a adalah operasi undang-undang (jika definisi pembolehubah berlaku selepas pernyataan panggilan, maka nilai pembolehubah dalam pernyataan panggilan tidak ditentukan). Malah, untuk semua pembolehubah yang ditakrifkan dengan kata kunci var dalam fungsi, operasi definisi akan dibawa ke permulaan fungsi (operasi penugasan masih akan kekal pada baris di mana var ditakrifkan Ini dipanggil angkat dalam JavaScript). Sebagai contoh, kod di atas adalah bersamaan dengan:

Salin kod Kod adalah seperti berikut:

fungsi(){
var a;
console.log(a);//undefined
a = "ujian";
console.log(a);//test
}

Rantaian skop pembolehubah

Hubungi Penyimpanan pembolehubah dalam JavaScript, anda boleh mempunyai pemahaman yang baik tentang "skop fungsi" dan angkat dalam JS. Oleh kerana pembolehubah disimpan dalam objek global atau objek panggilan fungsi, apabila pembolehubah ditakrifkan dalam fungsi, tidak kira di mana pembolehubah ditakrifkan dalam fungsi, pasti akan ada objek panggilan fungsi dengan nilai ini dalam objek panggilan fungsi . Sifat dengan nama yang sama dengan pembolehubah. Dengan cara ini, pembolehubah boleh diakses dari mana-mana dalam fungsi.

Mengenai panggilan fungsi, terdapat konsep yang lebih menarik dalam JavaScript: rantaian skop pembolehubah - kerana pembolehubah disimpan dalam objek global atau objek panggilan fungsi, apabila mengakses pembolehubah, anda boleh mengaksesnya daripada berbilang objek. Ambil kod berikut sebagai contoh:

Salin kod Kod adalah seperti berikut:

var x = "ujian";
fungsi(){
//fungsi tahap-1
var x = "temp";
fungsi(){
//fungsi tahap-2
var x = "sebenar";
//cuba akses x di sini }
}

Di dalam fungsi tahap-2 dalam kod di atas, apabila cuba mengakses pembolehubah x, program boleh mencari nilai atribut yang sepadan daripada 3 objek: objek panggilan fungsi yang digunakan untuk memanggil fungsi tahap-2, Panggilan fungsi objek dan objek global yang digunakan untuk memanggil fungsi tahap 1 - Berdasarkan perhubungan bersarang definisi fungsi, JavaScript akan menjana rantaian objek yang terdiri daripada objek global dan objek panggilan fungsi. Apabila mengakses pembolehubah, program akan mula mencari dari objek yang paling hampir dengan pernyataan akses Jika tiada carian ditemui, carian akan diteruskan dalam objek di peringkat atas dalam rantaian objek sehingga objek global.

Oleh kerana rantai objek ini berkaitan dengan skop pembolehubah, ia juga dipanggil "rantai skop".

Jika anda perlu menukar rantai skop buat sementara waktu dan memasukkan objek ke hadapan rantai skop (sebagai objek fungsi pertama yang diakses), anda boleh menggunakan pernyataan dengan:

Salin kod Kod adalah seperti berikut:

dengan(o){
//kod menggunakan sifat objek o.
}

Walau bagaimanapun, dalam mod ketat JavaScript, pernyataan dengan dilumpuhkan walaupun dalam mod tidak ketat, penggunaan pernyataan dengan tidak disyorkan.

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