關(guān)于Javascript作用域鏈的八點總結(jié)
1. JavaScript函數(shù)的作用域鏈分為定義時作用域鏈和運行時作用域鏈;
2.函數(shù)被定義的時候,它有一個屬性[[scope]]標明它的定義作用域鏈,定義時作用域鏈[[scope]]遵守這樣的規(guī)則:一個函數(shù)的定義時作用域鏈[[scope]]總是它所在的外部函數(shù)的執(zhí)行時作用域鏈;
3.全局函數(shù)的定義作用域鏈只包含window的屬性;
4.一個函數(shù)的執(zhí)行時作用域鏈總是在定義時作用域鏈的頭部壓入當前活動對象(它包含this,arguments,參數(shù),局部變量);
5.函數(shù)執(zhí)行時,變量尋址總是從作用域鏈的頂端朝下尋找;所以全局變量的尋址速度最慢;
6.內(nèi)部函數(shù)被執(zhí)行的時候,他仍然能夠訪問它完整的作用域鏈。這就是閉包能夠在運行時能夠訪問已經(jīng)結(jié)束的外部函數(shù)定義的變量的原因;
7.函數(shù)執(zhí)行遇到with語句時,會臨時在作用域鏈頂部壓入with指定的對象的所有屬性作為作用域鏈最頂端;
8.函數(shù)執(zhí)行遇到catch的時候,會臨時在作用域鏈頂部壓入catch指定的錯誤對象作為作用域鏈的最頂端;
下面給一個例子并繪制出作用域鏈,以加深理解:
有這么一段代碼:
function assignEvents(){
var id = "xdi9592";
document.getElementById("save-btn").onclick = function(event){
saveDocument(id);
};
}
把此函數(shù)產(chǎn)生的匿名閉包稱為Closure,則繪制出下圖為assignEvent執(zhí)行時作用域鏈和Closure的定義時作用域鏈:

- javascript 嵌套的函數(shù)(作用域鏈)
- 深入理解JavaScript作用域和作用域鏈
- 深入理解JavaScript系列(14) 作用域鏈介紹(Scope Chain)
- JavaScript中的作用域鏈和閉包
- 你必須知道的Javascript知識點之"深入理解作用域鏈"的介紹
- 深入Javascript函數(shù)、遞歸與閉包(執(zhí)行環(huán)境、變量對象與作用域鏈)使用詳解
- JavaScript作用域鏈使用介紹
- JavaScript作用域與作用域鏈深入解析
- 深入理解JavaScript高級之詞法作用域和作用域鏈
- JavaScript作用域鏈示例分享
- JavaScript 作用域鏈解析
- JavaScript函數(shù)作用域鏈分析
- Javascript變量的作用域和作用域鏈詳解
- 跟我學習javascript的作用域與作用域鏈
相關(guān)文章
前端報錯Failed?to?resolve?component:?smile-outlined?If?thi
這篇文章主要為大家介紹了前端報錯?Failed?to?resolve?component:?smile-outlined?If?this?is?a?native?custom?的問題分析解決,有需要的朋友可以借鑒參考下2023-06-06JS實現(xiàn)點擊鏈接切換顯示隱藏內(nèi)容的方法
這篇文章主要介紹了JS實現(xiàn)點擊鏈接切換顯示隱藏內(nèi)容的方法,涉及javascript鼠標事件響應及頁面元素屬性動態(tài)變換相關(guān)操作技巧,需要的朋友可以參考下2017-10-10js之如何刪除多層數(shù)組嵌套的最后一層中的部分數(shù)據(jù)
這篇文章主要介紹了js之如何刪除多層數(shù)組嵌套的最后一層中的部分數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06