1.什么是作用域鏈
1.1 概念
作用域鏈其實(shí)就是代碼在執(zhí)行過(guò)程中創(chuàng)建變量的一個(gè)作用域鏈思劳,保證對(duì)執(zhí)行環(huán)境有權(quán)訪問(wèn)的所有變量和函數(shù)可以有序的訪問(wèn)康谆。
1.2 規(guī)則
內(nèi)部環(huán)境可以通過(guò)作用域鏈訪問(wèn)外部朋蔫,而外部不能訪問(wèn)內(nèi)部昆汹。
var color = 'red';
function change() {
var changeColor = 'blue';
console.log(color); //red
console.log(changeColor); //blue
console.log(otherColor); //not defined
function other() {
var otherColor = 'yellow'
console.log(color,changeColor,otherColor) //red blue yellow
}
other()
}
change()
console.log(color); //red
console.log(changeColor); //not defined
console.log(otherColor); //not defined
根據(jù)上面代碼的執(zhí)行結(jié)果序矩,我們可以看到越是內(nèi)層的函數(shù)蜈抓,可以訪問(wèn)到的變量越多启绰,其實(shí)就是因?yàn)閮?nèi)部的函數(shù)可以通過(guò)作用域鏈逐級(jí)向上訪問(wèn),一直到全局沟使,而最外層卻只能訪問(wèn)到全局的變量委可,內(nèi)部函數(shù)的變量卻無(wú)法訪問(wèn)到。
1.3 查詢標(biāo)識(shí)符
從作用域前端腊嗡,向上逐級(jí)查詢給定名字匹配的標(biāo)識(shí)符着倾。實(shí)質(zhì)上還是沿著作用域鏈從內(nèi)向外去查找與給定名字匹配的標(biāo)識(shí)符
2. 聲明變量
2.1 聲明變量的方式
2.1.1 var 聲明變量
var聲明的變量,會(huì)提前到最近的作用域前頭燕少,不加var聲明提到全局環(huán)境卡者,可以重復(fù)聲明賦值。
var a = 1;
function add(){
var a = 2;
var b = 3;
return sum = a + b ;
console.log(sum); //5
}
add()
console.log(sum); //5
2.1.2 let 聲明變量
let聲明不會(huì)聲明提前客们,作用域在當(dāng)前區(qū)域崇决,但是不可以重復(fù)聲明同一名稱的變量材诽。
2.1.3 const 聲明變量
const聲明的時(shí)候必須賦值,且不能被修改恒傻。