一.作用域
簡單的說绣溜,作用域就是變量與函數(shù)的可訪問范圍慷彤,即作用域控制著變量與函數(shù)的可見性和生命周期。
在JavaScript中怖喻,變量的作用域有:
1.局部作用域
和全局作用域相反底哗,局部作用域一般只在固定的代碼片段內(nèi)可訪問到,最常見的例如函數(shù)內(nèi)部锚沸,所有在一些地方也會看到有人把這種作用域稱為函數(shù)作用域
2.全局作用域
在代碼中任何地方都能訪問到的對象擁有全局作用域跋选,一般來說以下幾種情形擁有全局作用域:
3.JavaScript的作用域鏈
解釋:1.alert(a)中的a首先在test1函數(shù)里面去找,看有沒有定義a這個變量,找到,就使用其中的定義的變量a;
2.如果沒找到,則會繼續(xù)在test中去找,有就使用;
3.如果還是沒找到,就會繼續(xù)向上找(全局對象)查找是否定義了a,找到了就使用.
作用域鏈定義
作用域鏈:JavaScript需要查詢一個變量x時,首先會查找作用域鏈的第一個對象咒吐,如果以第一個對象沒有定義x變量野建,JavaScript會繼續(xù)查找有沒有定義x變量属划,如果第二個對象沒有定義則會繼續(xù)查找,以此類推候生。
上面的代碼涉及到了三個作用域鏈對象同眯,依次是:test1、test唯鸭、window须蜗。
*/
2、函數(shù)體內(nèi)部目溉,局部變量的優(yōu)先級比同名的全局變量高明肮。
3、JavaScript沒有塊級作用域缭付。
4柿估、函數(shù)中聲明的變量在整個函數(shù)中都有定義。
這是由于在函數(shù)test6內(nèi)局部變量x在整個函數(shù)體內(nèi)都有定義( var a7= 10000陷猫,進行了聲明)秫舌,所以在整個test6函數(shù)體內(nèi)隱藏了同名的全局變量a7。這里之所以會彈出’undefined’是因為绣檬,第一個執(zhí)行alert(x)時足陨,局部變量x仍未被初始化。
5娇未、未使用var關(guān)鍵字定義的變量都是全局變量墨缘。
6、全局變量都是window對象的屬性