本篇內(nèi)容介紹了“JavaScript作用域鏈是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
創(chuàng)新互聯(lián)是一家專注于成都做網(wǎng)站、網(wǎng)站設計、外貿(mào)營銷網(wǎng)站建設與策劃設計,辰溪網(wǎng)站建設哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設十載,網(wǎng)設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:辰溪等地區(qū)。辰溪做網(wǎng)站價格咨詢:18982081108
作用域
1.什么是作用域
簡單來說,作用域(英文:scope)是據(jù)名稱來查找變量的一套規(guī)則,可以把作用域通俗理解為一個封閉的空間,這個空間是封閉的,不會對外部產(chǎn)生影響,外部空間不能訪問內(nèi)部空間,但是內(nèi)部空間可以訪問將其包裹在內(nèi)的外部空間。
2.[[Scopes]]屬性
在javascript中,每個函數(shù)都是一個對象,在對象中有些屬性我們可以訪問,有些我們是不能自由訪問的,[[Scopes]]屬性就是其中之一,這個屬性只能被JavaScript引擎讀取。
其實[[scope]]就是我們常說的作用域,其中存儲了作用域運行期的上下文集合。
在這里因為func.prototype.constructor和func指向同一個函數(shù),所以在這里我們通過訪問函數(shù)func的原型對象來查看[[Scopes]]屬性
3.作用域鏈
[[scope]]中存儲的執(zhí)行期的上下文對象的集合,這個集合呈鏈式連接,我們把這種鏈式連接叫做作用域鏈。JavaScript正是通過作用域鏈來查找變量的,其查找方式是沿著作用域鏈的頂端依次向下查詢(在哪個函數(shù)內(nèi)部查找對象,就在哪個函數(shù)作用域鏈中查找)
4.圖解查找變量原理
//以如下代碼為例說明JavaScript通過作用域鏈查找變量的原理** function a() { function b() { var b = 123; } var a = 123; b(); } var glob = 100;
1.當全局函數(shù)a()被定義時,作用域鏈如下
函數(shù)的[[Scopes]]屬性指向作用域鏈對象,此時作用域鏈只有一個鍵值對,這個鍵值對指向全局對象,全局對象存儲了全局下可以訪問的東西,也就是最外層作用域,大家都可以訪問的。
2.當全局函數(shù)a()被激活調用時,作用域鏈如下
此時作用域鏈能夠第一個訪問的是Activation Object中的鍵值對,如果沒有才訪問全局對象
3.函數(shù)a()中函數(shù)b被定義時,b的作用域鏈如下
當b只是被定義沒有被調用時,b的作用域鏈和a是相同的
4.當函數(shù)a()中的函數(shù)b被激活調用時,作用域鏈如下
作用域鏈最先指向函數(shù)b()的Activation Object,查找變量也是按作用域鏈順序訪問,找到就停止
“JavaScript作用域鏈是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質量的實用文章!