概念:任何編程語言都有作用域的概念崖技,簡單來說稿静,作用域就是變量與函數(shù)的可訪問范圍,即作用域控制著變量與函數(shù)的可見性和生命周期州刽。
js的作用域是靠函數(shù)來形成的,也就是說一個(gè)函數(shù)的變量在函數(shù)外不可以訪問浪箭。
作用域又可分為穗椅,全局作用域,局部作用域奶栖。
全局作用域
任何地方都能訪問到的對象擁有全局作用域匹表。
1.1函數(shù)外面定義的變量擁有全局作用域
var n =2;
function fn (){
var a =1;
return a;
}
1.2未定義直接賦值的變量自動(dòng)聲明為擁有全局作用域
2局部作用域
局部作用域一般只在固定的代碼片段內(nèi)可訪問到,最常見的例如函數(shù)內(nèi)部宣鄙,所以在一些地方會(huì)把這種作用域成為函數(shù)作用域袍镀。
圖一中,a是函數(shù)內(nèi)部聲明并賦值冻晤,擁有局部作用域苇羡,只能帶函數(shù)fn內(nèi)部使用,在fn外部使用就會(huì)報(bào)錯(cuò)明也,這就是局部作用域的特性宣虾,外部無法訪問惯裕。
作用域鏈
通俗地講温数,當(dāng)聲明一個(gè)函數(shù)時(shí),局部作用域一級(jí)一級(jí)向上包起來蜻势,就是作用域鏈撑刺。
當(dāng)執(zhí)行函數(shù)時(shí),總是先從函數(shù)內(nèi)部找尋局部變量
如果內(nèi)部找不到(函數(shù)的局部作用域沒有)握玛,則會(huì)向創(chuàng)建函數(shù)的作用域(聲明函數(shù)的作用域)尋找够傍,依次向上