Rumah  >  Artikel  >  hujung hadapan web  >  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
WBOYasal
2016-05-16 15:16:461330semak imbas

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.

Kenyataan:
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