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:
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:
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:
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:
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:
Walau bagaimanapun, dalam mod ketat JavaScript, pernyataan dengan dilumpuhkan walaupun dalam mod tidak ketat, penggunaan pernyataan dengan tidak disyorkan.