作用域指運行代碼時,代碼區(qū)塊中變量,函數(shù)和對象的可訪問性燥撞。
全局作用域
在代碼中任何地方都能訪問到的對象擁有全局作用域。
函數(shù)作用域
函數(shù)作用域指聲明在函數(shù)內(nèi)部的變量教硫。
塊級作用域
塊級作用域可通過let和const聲明,所聲明的變量在指定塊的作用域外無法被訪問辆布,在一個函數(shù)內(nèi)部或一個代碼塊內(nèi)部被創(chuàng)建瞬矩。
let和const的特點:
- 變量提升不會提升到代碼塊的頂部,所以需要手動放置到頂部锋玲。
- 禁止重復聲明景用。
作用域鏈是什么
自由變量指當前作用域中沒有定義的變量。
作用域鏈指由子作用域?qū)訉酉蚋缸饔糜蛑姓易杂米兞康年P(guān)系惭蹂。
作用域和執(zhí)行上下文的區(qū)別
javascript屬于解釋性語言伞插,js的執(zhí)行分為兩個階段:解釋階段和執(zhí)行階段。作用域在解釋階段盾碗,在函數(shù)定義時已經(jīng)確定媚污,但是執(zhí)行上下文在函數(shù)執(zhí)行之前才被創(chuàng)建。
執(zhí)行上下文可能隨時會變廷雅,但時作用域在定義時就被確定耗美,不會變京髓。同一個作用域下,不同的調(diào)用會產(chǎn)生不同的執(zhí)行上下文商架。