Rumah >hujung hadapan web >tutorial js >Memahami konsep skop JavaScript dan kemahiran skop_javascript peringkat blok
Skop sentiasa menjadi perkara paling penting dalam mana-mana bahasa pengaturcaraan, kerana ia mengawal keterlihatan dan kitaran hayat pembolehubah dan parameter. Bercakap mengenainya, fahami dahulu dua konsep: skop peringkat blok dan skop fungsi.
Apakah skop peringkat blok?
Mana-mana set pernyataan dalam sepasang pendakap kerinting ({ dan }) tergolong dalam blok, dan semua pembolehubah yang ditakrifkan di dalamnya tidak kelihatan di luar blok kod Kami memanggilnya skop peringkat blok.
Skop fungsi mudah difahami (*^__^*).
Kebanyakan bahasa seperti C mempunyai skop peringkat blok, tetapi JS tidak. Sila lihat demo di bawah:
//C语言 #include <stdio.h> void main() { int i=2; i--; if(i) { int j=3; } printf("%d/n",j); }
Apabila anda menjalankan kod ini, ralat "use an undefined variable:j" akan muncul. Seperti yang anda lihat, bahasa C mempunyai skop peringkat blok kerana j ditakrifkan dalam blok pernyataan if, jadi ia tidak boleh diakses di luar blok.
Bagaimana JS berkelakuan. Mari lihat demo yang lain:
functin test(){ for(var i=0;i<3;i++){ } alert(i); } test();
Jalankan kod ini dan "3" muncul di luar blok, pembolehubah yang saya takrifkan dalam blok masih boleh diakses. Dalam erti kata lain, JS tidak menyokong skop peringkat blok, ia hanya menyokong skop fungsi dan pembolehubah yang ditakrifkan di mana-mana dalam fungsi boleh dilihat di mana-mana dalam fungsi.
Jadi bagaimana kita boleh menjadikan JS mempunyai skop peringkat blok? Adakah anda masih ingat bahawa pembolehubah yang ditakrifkan dalam fungsi akan dimusnahkan apabila fungsi dipanggil? Bolehkah kita menggunakan ciri ini untuk mensimulasikan skop peringkat blok JS? Lihat DEMO di bawah:
function test(){ (function (){ for(var i=0;i<4;i++){ } })(); alert(i); } test();
Apabila anda menjalankannya sekali lagi pada masa ini, ralat "i" yang tidak ditentukan akan muncul Haha, ia telah dilaksanakan~~~Di sini, kami meletakkan blok pernyataan untuk penutupan, dan kemudian memanggil fungsi ini panggilan fungsi selesai, pembolehubah i dimusnahkan secara automatik, jadi kami tidak boleh mengaksesnya di luar blok.
Ciri penutupan JS ialah ciri yang paling penting ((*^__^*) semua orang tahu). Dalam JS, untuk mengelakkan konflik penamaan, kita harus cuba mengelak daripada menggunakan pembolehubah global dan fungsi global. Jadi, bagaimana untuk mengelakkannya? Ya, seperti yang ditunjukkan dalam demo di atas, kita boleh meletakkan semua yang kita mahu tentukan ke dalam
(function (){ //内容 })();
, pada masa ini, adakah kita sama dengan menambah skop fungsi pada lapisan luarnya? Program di luar skop ini tidak boleh mengaksesnya.