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