是什么?
作用域是你的代碼在運(yùn)行時(shí),各個(gè)變量老厌、函數(shù)和對象的可訪問性
為什么需要?
最小訪問原則
分類
- 全局作用域
- 局部作用域
1.全局作用域
JavaScript 文檔中(document)只有一個(gè)全局作用域黎炉。定義在函數(shù)之外的變量會(huì)被保存在全局作用域中
2.局部作用域
定義在函數(shù)中的變量就在局部作用域中枝秤。并且函數(shù)在每次調(diào)用時(shí)都有一個(gè)不同的作用域。這意味著同名變量可以用在不同的函數(shù)中慷嗜。因?yàn)檫@些變量綁定在不同的函數(shù)中淀弹,擁有不同作用域,彼此之間不能訪問庆械。
塊語句
塊級聲明包括if和switch薇溃,以及for和while循環(huán),和函數(shù)不同缭乘,它們不會(huì)創(chuàng)建新的作用域沐序。在塊級聲明中定義的變量從屬于該塊所在的作用域。
上下文
上下文通常涉及到你代碼某些特殊部分中的this值堕绩。作用域指的是變量的可見性策幼,而上下文指的是在相同的作用域中的this的值。在全局作用域中奴紧,上下文總是 Window 對象特姐。
執(zhí)行環(huán)境
作用域
(JavaScript 是一種單線程語言,所以它同一時(shí)間只能執(zhí)行單個(gè)任務(wù)绰寞。其他任務(wù)排列在執(zhí)行環(huán)境中到逊。當(dāng) JavaScript 解析器開始執(zhí)行你的代碼,環(huán)境(作用域)默認(rèn)設(shè)為全局滤钱。全局環(huán)境添加到你的執(zhí)行環(huán)境中觉壶,事實(shí)上這是執(zhí)行環(huán)境里的第一個(gè)環(huán)境。
之后件缸,每個(gè)函數(shù)調(diào)用都會(huì)添加它的環(huán)境到執(zhí)行環(huán)境中铜靶。無論是函數(shù)內(nèi)部還是其他地方調(diào)用函數(shù),都會(huì)是相同的過程他炊。
每個(gè)函數(shù)都會(huì)創(chuàng)建它自己的執(zhí)行環(huán)境争剿。
當(dāng)瀏覽器執(zhí)行完環(huán)境中的代碼,這個(gè)環(huán)境會(huì)從執(zhí)行環(huán)境中彈出痊末,執(zhí)行環(huán)境中當(dāng)前環(huán)境的狀態(tài)會(huì)轉(zhuǎn)移到父級環(huán)境蚕苇。瀏覽器總是先執(zhí)行在執(zhí)行棧頂?shù)膱?zhí)行環(huán)境(事實(shí)上就是你代碼最里層的作用域)。)
- 創(chuàng)建階段
- 執(zhí)行階段