function test(){
var message="hi";//局部變量
}
test();
alert(message);//錯(cuò)誤!
/*變量 message 是在函數(shù)中使用 var 定義的。當(dāng)函數(shù)被調(diào)用時(shí),就會(huì)創(chuàng)建該變量并為其賦值。
而函數(shù)執(zhí)行結(jié)束后,這個(gè)變量會(huì)隨著函數(shù)的執(zhí)行AO的銷(xiāo)毀而被刪除,因此函數(shù)執(zhí)行完成后再輸出這個(gè)變量就會(huì)導(dǎo)致錯(cuò)誤 --> 參考作用域章節(jié)*/
function test(){
message="hi";//全局變量
}
test();
alert(message);//"hi"
/* 省略了 var 操作符,因而 message 就成了全局變量。
調(diào)用一次 test() 函數(shù)后,這個(gè)變量就有了定義,之后就可以在函數(shù)外部的任何地方被訪(fǎng)問(wèn)到 */
四、全局變量和局部變量
定義:在函數(shù)外聲明的變量都為全局變量,在函數(shù)內(nèi)聲明的為局部變量
局部變量和全局變量重名會(huì)覆蓋全局變量
var a = 1;
function test1() {
var a;//局部變量與全局變量重名時(shí)會(huì)覆蓋全局變量,此時(shí)的a只有聲明卻未定義
console.log(a);//所以輸出值為 undefined
a = 2;
console.log(a); // 2
}
test1();
console.log(a);// 1
五、常量
由于 var 和 let 申明的是變量,如果要申明一個(gè)常量,在ES6之前是不行的,我們通常用全部大寫(xiě)的變量來(lái)表示“這是一個(gè)常量,不要修改它的值”:var PI = 3.14;
ES6 標(biāo)準(zhǔn)引入了新的關(guān)鍵字const來(lái)定義常量,const 與 let 都具有塊級(jí)作用域:const PI = 3.14;