作用域與上下文

1.作用域(Scope)

特指變量和函數(shù)的可訪(fǎng)問(wèn)范圍,控制著變量和函數(shù)的可見(jiàn)性和生命周期,在es5中有全局作用域和塊作用域之分,javascript采用詞法作用域,也是靜態(tài)作用域。

靜態(tài)作用域: 是指作用域在詞法分析階段就確定了,不會(huì)改變,也就是說(shuō)詞法作用域取決于源碼。

動(dòng)態(tài)作用域: 是指在運(yùn)行時(shí)根據(jù)程序的流程信息來(lái)動(dòng)態(tài)確立的。

2.上下文(context)

特指this的值,可以使用call(),apply(),bind(),箭頭函數(shù)等改變上下文。this永遠(yuǎn)指向最后調(diào)用它的那個(gè)對(duì)象。


3.作用域鏈

javascript中每個(gè)函數(shù)都表示一個(gè)函數(shù)對(duì)象,函數(shù)對(duì)象有一個(gè)僅共javascript引擎使用[[scope]]屬性,通過(guò)語(yǔ)法分析和預(yù)解析,將[[scope]]屬性指向函數(shù)定義時(shí)作用域中的所有對(duì)象集合,這個(gè)集合被稱(chēng)為函數(shù)的作用域鏈。

相比于作用域---誰(shuí)可以有權(quán)限訪(fǎng)問(wèn)到我(變量和函數(shù)),作用鏈可以理解成我(函數(shù))可以訪(fǎng)問(wèn)付集合。

4.執(zhí)行期上下文(Execution Context)

執(zhí)行某個(gè)具體的函數(shù)時(shí),js引擎都會(huì)創(chuàng)造一個(gè)執(zhí)行上下文(執(zhí)行期作用域鏈)和激活對(duì)象(他們的生命周期和函數(shù)一致,執(zhí)行完即銷(xiāo)毀),每次=執(zhí)行一次,都會(huì)創(chuàng)造一個(gè)執(zhí)行期上下文。但執(zhí)行一個(gè)函數(shù)時(shí),上下文作用域鏈將使用該函數(shù)的作用域鏈進(jìn)行初始化,這些值按照出現(xiàn)的順序復(fù)制到執(zhí)行期上下文鏈中。

5.閉包(Closure)

閉包是javascript最強(qiáng)大的特性之一,他允許函數(shù)訪(fǎng)問(wèn)局部作用域之外的數(shù)據(jù),閉包在日常編碼工作中非常常見(jiàn),但是,他會(huì)對(duì)性能操作影響。


例:圖表顯示作用域鏈和執(zhí)行作用域鏈

??function assignEvents(){

? ? var id = "xdi9592";

? ? document.getElementById("save-btn").onclick =? ? ? ? ? ?function(event) {

? ? ? ? saveDocument(id);

? ? };

}

作用域鏈:

執(zhí)行期作用域鏈:


參考文章:

https://blog.csdn.net/qq_27626333/article/details/78463565



****擴(kuò)展

詞法分析? 語(yǔ)法分析? 編譯執(zhí)行? ?解釋執(zhí)行

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容