亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

EasonTyler / 2691人閱讀

摘要:昨天在回答一個(gè)問(wèn)題時(shí)引發(fā)的思考,雖然概念我明白,但是當(dāng)時(shí)一直想在函數(shù)內(nèi)部調(diào)用的為什么訪問(wèn)不到調(diào)用他的函數(shù)的局部變量,今天又翻了下參考資料自己用代碼測(cè)試了一遍。

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

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能訪問(wèn)到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問(wèn)了未定義變量js解釋器就報(bào)錯(cuò)把程序中斷了。

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

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

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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/85804.html

相關(guān)文章

  • JavaScript 闖關(guān)記》之作用域和閉包

    摘要:作用域和閉包是最重要的概念之一,想要進(jìn)一步學(xué)習(xí),就必須理解作用域和閉包的工作原理。全局和局部作用域的關(guān)系在函數(shù)體內(nèi),局部變量的優(yōu)先級(jí)高于同名的全局變量。作用域鏈的用途,是保證對(duì)執(zhí)行環(huán)境有權(quán)訪問(wèn)的所有變量和函數(shù)的有序訪問(wèn)。 作用域和閉包是 JavaScript 最重要的概念之一,想要進(jìn)一步學(xué)習(xí) JavaScript,就必須理解 JavaScript 作用域和閉包的工作原理。 作用域 任何...

    Jacendfeng 評(píng)論0 收藏0
  • 前端學(xué)習(xí)筆記之閉包——看了一張圖終于明白啥是閉包了

    摘要:在一個(gè)閉包環(huán)境內(nèi)修改變量值,不會(huì)影響另一個(gè)閉包中的變量。直到看到函數(shù)閉包閉包這篇文章的代碼一部分,終于明白其中的邏輯了。 閉包 閉包定義:指擁有多個(gè)變量和綁定了這些變量的環(huán)境的表達(dá)式(通常是一個(gè)函數(shù)),因而這些變量也是該表達(dá)式的一部分。函數(shù)內(nèi)部可以直接讀取全局變量。函數(shù)內(nèi)部變量無(wú)法在函數(shù)外部訪問(wèn)。函數(shù)內(nèi)部聲明要用var或者let聲明,不然會(huì)變成全局變量鏈?zhǔn)阶饔糜颍鹤訉?duì)象會(huì)一級(jí)級(jí)向上尋找...

    andycall 評(píng)論0 收藏0
  • Javascript 函數(shù)、作用域鏈與閉包

    摘要:而外層的函數(shù)不能訪問(wèn)內(nèi)層的變量或函數(shù),這樣的層層嵌套就形成了作用域鏈。閉包閉包是指有權(quán)訪問(wèn)另一個(gè)函數(shù)作用域中的變量的函數(shù),創(chuàng)建閉包的最常見(jiàn)的方式就是在一個(gè)函數(shù)內(nèi)創(chuàng)建另一個(gè)函數(shù),通過(guò)另一個(gè)函數(shù)訪問(wèn)這個(gè)函數(shù)的局部變量。 閉包是js中一個(gè)極為NB的武器,但也不折不扣的成了初學(xué)者的難點(diǎn)。因?yàn)閷W(xué)好閉包就要學(xué)好作用域,正確理解作用域鏈,然而想做到這一點(diǎn)就要深入的理解函數(shù),所以我們從函數(shù)說(shuō)起。 函數(shù)...

    ssshooter 評(píng)論0 收藏0
  • JavaScript函數(shù)

    摘要:函數(shù)使用它們實(shí)參的值來(lái)計(jì)算返回值,稱為該函數(shù)調(diào)用表達(dá)式的值。通常函數(shù)名的第一個(gè)字符為小寫。在函數(shù)內(nèi)部定義的變量,外部無(wú)法讀取,稱為局部變量。注意對(duì)于命令來(lái)說(shuō),局部變量只能在函數(shù)內(nèi)部聲明,在其他區(qū)塊中聲明,一律都是全局變量。 函數(shù) 1.函數(shù)簡(jiǎn)介 通過(guò)函數(shù)可以封裝任意多條語(yǔ)句,而且可以在任何地方、任何時(shí)候調(diào)用。 ECMAScript中的函數(shù)使用function關(guān)鍵字來(lái)聲明,后跟一組參數(shù)以及...

    Martin91 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<