1.變量的定義
可以使用var定義變量,變量如果沒有賦值爽雄,那變量的初始值為undefined
2.變量作用域
變量作用域指變量起作用的范圍隙咸。變量分為全局變量和局部變量。全局變量在全局都擁有定義侥蒙;而局部變量只能在函數(shù)內(nèi)有效。
在函數(shù)體內(nèi)蕊爵,同名的局部變量或者參數(shù)的優(yōu)先級會高于全局變量辉哥。也就是說桦山,如果函數(shù)內(nèi)存在和全局變量同名的局部變量或者參數(shù)攒射,那么全局變量將會被局部變量覆蓋。
所有不使用 var定義的變量都視為全局變量
3.函數(shù)作用域和聲明該提前
js的函數(shù)作用是指在函數(shù)聲明的所有變量在函數(shù)體內(nèi)始終有定義的恒水,也就是說變量在聲明之前已經(jīng)可用会放,所有這特性成為聲明提前,即js函數(shù)里的聲明(只是聲明钉凌,但不涉及賦值)都被提前到函數(shù)體的頂部咧最,而變量賦值操作留在原來的位置。
聲明提前是在JavaScript引擎的預(yù)編譯時進(jìn)行御雕,是在代碼開始運(yùn)行之前矢沿。
例子:
varscope ='global';
functionf(){
console.log(scope);
varscope ='local';
console.log(scope);
}
由于函數(shù)內(nèi)聲明提升,所以上面的代碼實(shí)際上是這樣的
varscope ='global';
functionf(){
varscope;//變量聲明提升到函數(shù)頂部
console.log(scope);
scope ='local';//變量初始化依然保留在原來的位置
console.log(scope);
}
經(jīng)過這樣變形之后酸纲,答案就就非常明顯了捣鲸。由于scope在第一個console.log(scope)語句之前就已經(jīng)定義了,但是并沒有賦值闽坡,因此此時scope的指是undefined.第二個console.log(scope)語句之前栽惶,scope已經(jīng)完成賦值為’local’,所以輸出的結(jié)果是local疾嗅。