Kita semua tahu bahawa pembolehubah tempatan yang ditakrifkan dalam fungsi sentiasa ditakrifkan dalam badan fungsi di mana ia diisytiharkan dan fungsi bersarangnya, dan akan sentiasa ada objek yang menunjuk ke objek global dalam rantai skop fungsi itu, supaya Fungsi boleh mengakses pembolehubah global.
var ga = 'global'; var func = function() { var la = 'local'; return function() { return function() { return function() { alert(la);alert(ga); } } } } a = func(); a()()();// 弹出 local 和 global
Jadi apabila fungsi A ditakrifkan secara luaran dipanggil oleh fungsi B dalam badan fungsi, bolehkah A mengakses pembolehubah tempatan yang ditakrifkan dalam B? Jawapannya tidak, ubah suai sedikit contoh di atas seperti berikut
var ga = 'global'; function repeat() { alert(la); } var func = function() { var la = 'local'; alert(1); repeat(); alert(2); }; func();
Hasil operasi di atas ialah hanya 1 yang muncul Apabila ulangan dipanggil, jurubahasa js melaporkan ralat kerana ia mengakses pembolehubah tidak ditentukan dan mengganggu program.
Sebabnya ialah fungsi menyimpan rantai skop apabila ia ditakrifkan Fungsi ulangan ditakrifkan secara luaran. Tiada pembolehubah tempatan yang dipanggil la dalam skopnya la, jadi ralat akan dilaporkan.
Jadi terdapat perbezaan besar antara fungsi bersarang dan panggilan bersarang kepada fungsi luaran dalam fungsi.
Saya berfikir semalam apabila saya menjawab soalan http://www.jb51.net/article/78958.htm Walaupun saya faham konsepnya, kenapa saya sentiasa mahu memanggil ulangan di dalam fungsi? Saya tidak boleh mengakses pembolehubah tempatan fungsi yang memanggilnya Saya menyemak semula bahan rujukan hari ini dan mengujinya sendiri dengan kod. Saya harap artikel ini dapat membantu rakan-rakan yang mempunyai kekeliruan yang sama.