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

資訊專欄INFORMATION COLUMN

作用域與作用域鏈

Invoker / 655人閱讀

摘要:作用域首先分為兩個部分全局作用域和局部作用域。局部作用域在函數(shù)內(nèi)部聲明的變量和函數(shù)保存在函數(shù)的局部作用域中。作用域鏈作用域鏈?zhǔn)且驗(yàn)楹瘮?shù)發(fā)生了嵌套,當(dāng)一個函數(shù)嵌套在另一個函數(shù)內(nèi)就發(fā)生了作用域的嵌套。

1.作用域
比較復(fù)雜的說法是根據(jù)名稱來查找變量的一套規(guī)則,還有的說法是變量數(shù)據(jù)的集合。作用域其實(shí)是指一個包含了所有在同一個區(qū)域聲明的變量和函數(shù)的集合,那么如何決定這些變量數(shù)據(jù)和函數(shù)是屬于同一區(qū)域的呢?這就由他們最初聲明時的位置來決定的。作用域首先分為兩個部分:全局作用域和局部作用域。
全局作用域:在代碼任何地方都可以訪問到的變量和函數(shù)保存在全局作用域中。
定義在全局的(最外層的)變量和函數(shù):

這段代碼中,變量a和函數(shù)Foo定義在最外層,所以在代碼的任何地方都可以訪問到他們。
未聲明的變量,自動定義為全局變量:

變量a沒有聲明,但對它進(jìn)行了賦值,這不是一個錯誤的操作,因?yàn)橐鏁J(rèn)的將變量a聲明為全局變量。
局部作用域:在函數(shù)內(nèi)部聲明的變量和函數(shù)保存在函數(shù)的局部作用域中。

變量a是全局變量,所以在函數(shù)bar的內(nèi)部可以訪問到a,變量c定義在函數(shù)bar內(nèi)部,所以c是存在在函數(shù)bar的局部作用域中。函數(shù)bar定義在函數(shù)Foo內(nèi)部,所以在全局作用域中找不到這個函數(shù),當(dāng)試圖去訪問它時,會有ReferenceError。變量b同理也無法在外部作用域中被訪問。
這段代碼中,console.log(a+b+c)輸出9,函數(shù)bar內(nèi)部只定義了變量c,但是他卻可以訪問到外部的變量a和b,這就引出了下面所要討論的作用域鏈。
2.作用域鏈
作用域鏈?zhǔn)且驗(yàn)楹瘮?shù)發(fā)生了嵌套,當(dāng)一個函數(shù)嵌套在另一個函數(shù)內(nèi)就發(fā)生了作用域的嵌套。當(dāng)一個函數(shù)要查找變量時,它會從自已的作用域開始查找,如果找不到就向上一級,找嵌套自己的父級作用域,這樣一級一級的查找,知道找到為止,或者到最外層作用域(全局作用域)。

函數(shù)bar需要訪問三個變量:a、b、c,首先會查找自己的局部作用域,只找到了聲明在內(nèi)部的變量c,所以向上一級查找,就到了嵌套它的函數(shù),也就是他的父級Foo函數(shù)的局部作用域,在Foo的局部作用域中找到了需要的變量a和b。這里注意一下,全局作用域中也有一個相同命名的變量a,但是當(dāng)查找到需要的變量時,搜索就會停止,不會再進(jìn)行下去,所以全局作用域中a不會被搜索。

參考資料:
1.YOU DON"T KNOW JS ,KYLE SIMPSON

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

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

相關(guān)文章

  • 【7】JavaScript 函數(shù)高級——作用域與作用域鏈

    摘要:函數(shù)高級作用域與作用域鏈一作用域作用域個數(shù)定義的函數(shù)個數(shù)全局作用域理解就是一塊地盤一個代碼段所在的區(qū)域。函數(shù)執(zhí)行上下文環(huán)境是在調(diào)用函數(shù)時函數(shù)體代碼執(zhí)行之前創(chuàng)建。 JavaScript函數(shù)高級——作用域與作用域鏈 一、作用域 作用域個數(shù) = n(定義的函數(shù)個數(shù)) + 1(全局作用域)(1)理解 就是一塊地盤, 一個代碼段所在的區(qū)域。 它是靜態(tài)的(相對于上下文對象), 在編寫代碼時就確定...

    lentrue 評論0 收藏0
  • 進(jìn)擊JavaScript之(二)詞法作用域與作用域鏈

    摘要:一作用域域表示的就是范圍,即作用域,就是一個名字在什么地方可以使用,什么時候不能使用。概括的說作用域就是一套設(shè)計(jì)良好的規(guī)則來存儲變量,并且之后可以方便地找到這些變量。 一、作用域 域表示的就是范圍,即作用域,就是一個名字在什么地方可以使用,什么時候不能使用。想了解更多關(guān)于作用域的問題推薦閱讀《你不知道的JavaScript上卷》第一章(或第一部分),從編譯原理的角度說明什么是作用域。概...

    denson 評論0 收藏0
  • Javascript重溫OOP之作用域與閉包

    摘要:的變量作用域是基于其特有的作用域鏈的。需要注意的是,用創(chuàng)建的函數(shù),其作用域指向全局作用域。所以,有另一種說法認(rèn)為閉包是由函數(shù)和與其相關(guān)的引用環(huán)境組合而成的實(shí)體。 作用域 定義 在編程語言中,作用域控制著變量與參數(shù)的可見性及生命周期,它能減少名稱沖突,而且提供了自動內(nèi)存管理 --javascript 語言精粹 我理解的是,一個變量、函數(shù)或者成員可以在代碼中訪問到的范圍。 js的變量作...

    JessYanCoding 評論0 收藏0
  • 作用域與閉包的學(xué)習(xí)

    摘要:閉包,一言以蔽之,就是函數(shù)和作用域鏈,通俗點(diǎn)就是函數(shù)內(nèi)部使用了外面定義的變量。內(nèi)部環(huán)境可以通過作用域鏈訪問所有的外部環(huán)境,但外部環(huán)境不能訪問內(nèi)部環(huán)境的任何變量或函數(shù)。 閉包,一言以蔽之,就是函數(shù)和作用域鏈,通俗點(diǎn)就是函數(shù)內(nèi)部使用了外面定義的變量。我們從一個例子說起: function foo(){ var a = 2; var b = 3; return fun...

    caige 評論0 收藏0
  • 深入理解 JavaScript, 從作用域與作用域鏈開始

    摘要:所以上面那段代碼鏈中最初應(yīng)該是之后之后所以最后的輸出結(jié)果是作用域鏈概念看了前面一個完整的函數(shù)執(zhí)行過程,讓我們來說下作用域鏈的概念吧。而這一條形成的鏈就是中的作用域鏈。 showImg(https://segmentfault.com/img/bVbvayE?w=1280&h=545); 1. 什么是作用域 作用域是你的代碼在運(yùn)行時,某些特定部分中的變量,函數(shù)和對象的可訪問性。換句話說,...

    frontoldman 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<