久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      JavaScript底層原理之作用域鏈(圖文詳解)

      本篇文章給大家?guī)砹薐avaScript中作用域鏈的相關(guān)知識,外部空間不能訪問內(nèi)部變量,我們往往只知道這一基本規(guī)則,那實(shí)現(xiàn)這一基本規(guī)則的基本底層原理是什么呢?希望能給大家一些幫助!

      JavaScript底層原理之作用域鏈(圖文詳解)

      作用域

      1.什么是作用域

      簡單來說,作用域(英文:scope)是據(jù)名稱來查找變量的一套規(guī)則,可以把作用域通俗理解為一個(gè)封閉的空間,這個(gè)空間是封閉的,不會(huì)對外部產(chǎn)生影響,外部空間不能訪問內(nèi)部空間,但是內(nèi)部空間可以訪問將其包裹在內(nèi)的外部空間。

      2.[[Scopes]]屬性

      在javascript中,每個(gè)函數(shù)都是一個(gè)對象,在對象中有些屬性我們可以訪問,有些我們是不能自由訪問的,[[Scopes]]屬性就是其中之一,這個(gè)屬性只能被JavaScript引擎讀取。

      其實(shí)[[scope]]就是我們常說的作用域,其中存儲(chǔ)了作用域運(yùn)行期的上下文集合。

      在這里因?yàn)閒unc.prototype.constructor和func指向同一個(gè)函數(shù),所以在這里我們通過訪問函數(shù)func的原型對象來查看[[Scopes]]屬性

      JavaScript底層原理之作用域鏈(圖文詳解)

      3.作用域鏈

      [[scope]]中存儲(chǔ)的執(zhí)行期的上下文對象的集合,這個(gè)集合呈鏈?zhǔn)竭B接,我們把這種鏈?zhǔn)竭B接叫做作用域鏈。JavaScript正是通過作用域鏈來查找變量的,其查找方式是沿著作用域鏈的頂端依次向下查詢(在哪個(gè)函數(shù)內(nèi)部查找對象,就在哪個(gè)函數(shù)作用域鏈中查找)

      4.圖解查找變量原理

      //以如下代碼為例說明JavaScript通過作用域鏈查找變量的原理** function a() {   function b() {       var b = 123;   }   var a = 123;   b(); } var glob = 100;

      1.當(dāng)全局函數(shù)a()被定義時(shí),作用域鏈如下

      JavaScript底層原理之作用域鏈(圖文詳解)

      函數(shù)的[[Scopes]]屬性指向作用域鏈對象,此時(shí)作用域鏈只有一個(gè)鍵值對,這個(gè)鍵值對指向全局對象,全局對象存儲(chǔ)了全局下可以訪問的東西,也就是最外層作用域,大家都可以訪問的。

      2.當(dāng)全局函數(shù)a()被激活調(diào)用時(shí),作用域鏈如下

      JavaScript底層原理之作用域鏈(圖文詳解)

      此時(shí)作用域鏈能夠第一個(gè)訪問的是Activation Object中的鍵值對,如果沒有才訪問全局對象

      3.函數(shù)a()中函數(shù)b被定義時(shí),b的作用域鏈如下

      JavaScript底層原理之作用域鏈(圖文詳解)

      當(dāng)b只是被定義沒有被調(diào)用時(shí),b的作用域鏈和a是相同的

      4.當(dāng)函數(shù)a()中的函數(shù)b被激活調(diào)用時(shí),作用域鏈如下

      JavaScript底層原理之作用域鏈(圖文詳解)

      作用域鏈最先指向函數(shù)b()的Activation Object,查找變量也是按作用域鏈順序訪問,找到就停止

      5.總結(jié)

      之所以外部作用域不能訪問內(nèi)部作用域的原因是外部作用域的作用域鏈沒有內(nèi)部作用域的Activation Object,所以無法訪問內(nèi)部變量,內(nèi)部作用域訪問變量的順序是按照作用域鏈,先從里面查找,沒有就沿著作用域鏈向外找,外部是全局作用域

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號