Rumah > hujung hadapan web > tutorial js > Analisis perbezaan antara fungsi bersarang javascript dan memanggil fungsi luaran dalam kemahiran functions_javascript

Analisis perbezaan antara fungsi bersarang javascript dan memanggil fungsi luaran dalam kemahiran functions_javascript

WBOY
Lepaskan: 2016-05-16 15:16:46
asal
1354 orang telah melayarinya

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
Salin selepas log masuk

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();
Salin selepas log masuk

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.

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan