var胚膊,let故俐,const關(guān)鍵字
定義:給一個變量在內(nèi)存當(dāng)中開辟一個空間。
1.var關(guān)鍵字
- var聲明的范圍是函數(shù)作用域紊婉,let和const聲明的范圍是塊作用域
- var 聲明的變量會被提升到函數(shù)作用域的頂部药版,let 和 const 聲明的變量不存在提升,且具有暫時性死區(qū)特征
- var 允許在同一個作用域中重復(fù)聲明同一個變量肩榕,let 和 const 不允許
- 在全局作用域中使用 var 聲明的變量會成為 window 對象的屬性刚陡,let 和 const 聲明的變量則不會
var的預(yù)解析
// 提前調(diào)用 預(yù)解析
console.log( int1 );
// // 提前調(diào)用 結(jié)果是報錯
console.log( int2 );
// var 定義的變量
var int1 = 100 ;
let int2 = 200 ;
作用域
var沒有塊級作用域,而let聲明的范圍是塊作用域(在{}里就代表一個塊級作用域)
if (true) {
var message = "hello";
console.log(message); // hello
}
console.log(message); // hello
if (true) {
let message = "hello";
console.log(message); // hello
}
console.log(message); // 報錯: message is not defined
let
- let定義的變量不能預(yù)解析株汉,提前調(diào)用的結(jié)果是報錯筐乳。
- let定義的變量不能重復(fù),否則執(zhí)行報錯乔妈。
- let定義的變量如果在{}中只能在{}中調(diào)用蝙云。
- 在循環(huán)語句中var定義的循環(huán)變量和使用let定義的循環(huán)變量。執(zhí)行原理和執(zhí)行效果不同路召。
let勃刨,count不允許一個塊作用域中出現(xiàn)冗余聲明
if (true) {
// error: 無法重新聲明塊范圍變量“a”
let a;
let a;
count
- const定義的變量不能預(yù)解析,提前調(diào)用的結(jié)果是報錯股淡。
- const定義的變量不能重復(fù)身隐,否則執(zhí)行報錯。
- const 定義的變量存儲的數(shù)據(jù)數(shù)值不能改變唯灵,也就是const定義的變量贾铝,不能重復(fù)賦值。
count定義的變量不能重復(fù)復(fù)制埠帕,一般用來定義常量
// const 定義的變量 不能重復(fù)賦值
// const c = 100 ;
// c = 200 ;
// 結(jié)果是報錯
const arr = [1,2,3,4,5] ;
// 只是修改引用數(shù)據(jù)類型中,數(shù)據(jù)單元存儲的數(shù)據(jù)
// 沒有修改 arr變量中 存儲的引用數(shù)據(jù)類型的內(nèi)存地址
arr[0] = '北京' ;
console.log( arr );