Lingkup selalu menjadi prioritas utama dalam bahasa pemrograman apa pun karena mengontrol visibilitas dan siklus hidup variabel dan parameter. Berbicara tentang ini, pertama-tama pahami dua konsep: ruang lingkup level blok dan ruang lingkup fungsi.
Apa itu lingkup level blok?
Pernyataan yang ditetapkan dalam setiap kawat gigi keriting ({dan}) milik blok, dan semua variabel yang ditentukan dalam hal ini tidak terlihat di luar blok kode, yang kami sebut lingkup level blok.
Lingkup fungsi mudah dipahami (*^__^*), dan parameter dan variabel yang didefinisikan dalam fungsi tidak terlihat di luar fungsi.
Sebagian besar bahasa C-Class memiliki lingkup level blok, tetapi JS tidak. Silakan lihat demo di bawah ini:
// C Bahasa#Sertakan <stdio.h> void main () {int i = 2; Saya--; if (i) {int j = 3; } printf ("%d/n", j); }Saat menjalankan kode ini, kesalahan "Gunakan variabel yang tidak ditentukan: J" akan muncul. Seperti yang Anda lihat, bahasa C memiliki ruang lingkup level blok karena J didefinisikan dalam blok pernyataan IF, sehingga tidak dapat diakses di luar blok.
Dan bagaimana kinerja JS, mari kita lihat demo lain:
functin test () {for (var i = 0; i <3; i ++) {} alert (i); } tes();Jalankan kode ini dan "3" muncul. Dapat dilihat bahwa di luar blok, variabel yang saya tentukan di blok masih dapat diakses. Artinya, JS tidak mendukung lingkup level blok, itu hanya mendukung lingkup fungsi, dan variabel yang didefinisikan di mana saja dalam suatu fungsi terlihat di mana saja dalam fungsi itu.
Jadi bagaimana kita membuat JS memiliki ruang lingkup level blok? Apakah Anda masih ingat bahwa ketika variabel yang ditentukan dalam suatu fungsi disebut, variabel akan dihancurkan? Bisakah kita menggunakan fitur ini untuk mensimulasikan ruang lingkup level blok JS? Lihatlah demo berikut:
function test () {(function () {for (var i = 0; i <4; i ++) {}}) (); waspada (i); } tes();Jalankan lagi saat ini, kesalahan "I" yang tidak ditentukan akan muncul. Haha, diimplementasikan ~~~ di sini, kami menempatkan blok pernyataan untuk penutupan dan menyebut fungsi ini. Ketika panggilan fungsi selesai, variabel saya akan dihancurkan secara otomatis, jadi kami tidak dapat mengaksesnya di luar blok.
Fitur penutupan JS adalah fitur terpenting ((*^__^*) yang dipahami semua orang). Di JS, untuk mencegah konflik penamaan, kita harus mencoba menghindari penggunaan variabel global dan fungsi global. Jadi, bagaimana cara menghindarinya? Oke, seperti yang ditunjukkan dalam demo di atas, kita dapat menempatkan semua yang ingin kita tentukan menjadi satu
(function () {// content}) ();Di antara mereka, saat ini, apakah setara dengan menambahkan ruang lingkup fungsi ke lapisan luar mereka? Program di luar ruang lingkup ini tidak dapat mengaksesnya.