理解JavaScript中的作用域鏈
理解了作用域鏈,閉包就不難理解了,所以本文主要談一談我對作用域鏈的理解。
關(guān)于JavaScript中變量的作用域,全局變量在程序中始終都有定義。局部變量在聲明它的函數(shù)體內(nèi)以及其內(nèi)部所嵌套的函數(shù)內(nèi)始終是有定義的。那么JavaScript是如何管理這些全局變量和局部變量作用域的呢,這就涉及到了作用域鏈。
作用域鏈相當于一個對象鏈表。鏈表的上的對象定義了這段script代碼中的變量。如果要查找一個變量x,則會從這個作用域鏈的當前有權(quán)限訪問的最底層對象開始找起,如果這個對象有一個名叫x的屬性,則直接使用這個屬性的值,如果沒有找到繼續(xù)向外層找其他的對象上是否有這個屬性,直到找到作用域鏈的尾部,如果還沒有,就返回undefined。
這里的“里層,外層”就是內(nèi)部函數(shù)對包裹它的函數(shù)是不可訪問的,提前說明一下有利于之后的理解。
在如下所示的JavaScript頂層代碼中(不包含任何函數(shù)內(nèi)定義的代碼):
1 <script> 2 'use strict'; 3 var a = ""; 4網(wǎng)友評論