亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

javascript嵌套函數(shù)和在函數(shù)內(nèi)調(diào)用外部函數(shù)的區(qū)別分析

 更新時(shí)間:2016年01月31日 22:01:38   投稿:mdxy-dxy  
這篇文章主要介紹了javascript嵌套函數(shù)和在函數(shù)內(nèi)調(diào)用外部函數(shù)的區(qū)別,需要的朋友可以參考下

我們都知道在函數(shù)中定義的局部變量在聲明他的函數(shù)體以及其嵌套的函數(shù)內(nèi)始終是有定義的,并且在函數(shù)的作用域鏈上始終會(huì)有個(gè)對(duì)象指向全局對(duì)象,使函數(shù)能夠訪問到全局變量。

var ga = 'global';
var func = function() {
  var la = 'local';
 return function() {
    return function()
    {
      return function()
      {
        alert(la);alert(ga);
      }
    }
 }

}
a = func();
a()()();// 彈出 local 和 global

那么在外部定義的函數(shù)A, 被函數(shù)B在函數(shù)體內(nèi)調(diào)用時(shí),A能訪問到B中定義的局部變量嗎?答案是否定的,把上面的例子稍作修改如下

var ga = 'global';

function repeat() {
 alert(la);  
}
var func = function() {
  var la = 'local';
  alert(1);
  repeat();
  alert(2);
};

func();

上面的運(yùn)行結(jié)果是只彈出了1,在調(diào)用repeat的時(shí)候,因?yàn)樵L問了未定義變量js解釋器就報(bào)錯(cuò)把程序中斷了。

原因是函數(shù)在定義時(shí)保存了一個(gè)作用域鏈,repeat函數(shù)在外部定義,在他的作用域中并沒有一個(gè)局部變量叫l(wèi)a,繼續(xù)在全局作用域查找也沒找到la所以就會(huì)報(bào)錯(cuò)。

所以嵌套函數(shù)和在函數(shù)內(nèi)嵌套調(diào)用外部函數(shù)還是有很大區(qū)別的。

昨天在回答一個(gè)問題http://chabaoo.cn/article/78958.htm時(shí)引發(fā)的思考,雖然概念我明白,但是當(dāng)時(shí)一直想在函數(shù)內(nèi)部調(diào)用的repeat為什么訪問不到調(diào)用他的函數(shù)的局部變量,今天又翻了下參考資料自己用代碼測(cè)試了一遍。希望這篇文章能幫助到有同樣困惑的朋友。

相關(guān)文章

最新評(píng)論