let(變量) 與 const(常量)
(獲取最新完整前端課程關(guān)注vx公眾號(hào):前端拓路者coder,回復(fù):資料)
- 之前定義變量,用 var 關(guān)鍵字;有如下主要缺點(diǎn):
- 存在變量提升問(wèn)題,降低 js 代碼的可閱讀性
- 沒(méi)有塊級(jí)作用域,容易造成變量污染
1. console.log (s);
var s= 10;
//打印的結(jié)果:undefined,說(shuō)明var聲明的確實(shí)是有變量提升的問(wèn)題
2.
for (var i = 0; i<10; i++ ) {
}
console.log(i) //10
// 在for循環(huán)中我們希望i只在for循環(huán){}內(nèi)使用,然而在外部也能打印出來(lái),
//說(shuō)明var 定義的變量沒(méi)有塊級(jí)作用域
- let 主要特性:
- 不存在變量提升問(wèn)題,只有定義之后才能使用此變量
- 有 { } 作用域
console.log(a)
let a = 10 ;
//產(chǎn)生報(bào)錯(cuò):VM55:1 Uncaught ReferenceError: a is not defined
//說(shuō)明let 不存在變量提升問(wèn)題,只有定義之后才能使用此變量
for (let i = 0; i<10; i++ ) {
}
console.log(i)
//產(chǎn)生報(bào)錯(cuò):VM60:4 Uncaught ReferenceError: i is not defined
//說(shuō)明有 { } 作用域--塊級(jí)作用域
- const 主要特性:
- 不存在變量提升問(wèn)題,只有定義之后才能使用此變量
- const 定義的常量,無(wú)法被重新賦值
- 當(dāng)定義常量的時(shí)候,必須定義且初始化,否則報(bào)語(yǔ)法錯(cuò)誤
- const 定義的常量,也有 塊級(jí)作用域
const a = 10;
a = 12;
console.log (a)
//產(chǎn)生報(bào)錯(cuò):VM65:1 Uncaught SyntaxError: Identifier 'a' has already been declared
//說(shuō)明無(wú)法被重新賦值 賦值后會(huì)報(bào)錯(cuò)
const d
//執(zhí)行的時(shí)候會(huì)報(bào)一個(gè)錯(cuò) Uncaught SyntaxError: Missing initializer in const declaration
//說(shuō)明有 當(dāng)定義常量的時(shí)候,必須定義且初始化,否則報(bào)語(yǔ)法錯(cuò)誤
//其實(shí)我們可以想到如果不給初始值的話,我們又不能給他重新賦值,
//所以他一直是undefined,所以沒(méi)有任何意義
那么看看const的塊級(jí)作用域的體驗(yàn)的吧
for ( let i = 0; i < 10; i++){
const a = 'hello';
console.log (a)
}
執(zhí)行上述代碼我們會(huì)發(fā)現(xiàn)是打印出10個(gè)hello
但是代碼翻譯一下不是這樣的嗎??
const a = 'hello';
const a = 'hello';
const a = 'hello';
const a = 'hello';
const a = 'hello';
const a = 'hello';
const a = 'hello';
const a = 'hello';
const a = 'hello';
const a = 'hello';
console.log (a)
這樣不用看,肯定是報(bào)錯(cuò)的,因?yàn)閏onst 定義的常量,無(wú)法被重新賦值
但是在循環(huán)里為什么沒(méi)有報(bào)錯(cuò)而是每個(gè)打印出來(lái)的???
這是應(yīng)為for循環(huán)每次循環(huán)都是會(huì)建立一個(gè){}作用域,在當(dāng)前次循環(huán)的{}作用域中會(huì)定義一個(gè)常量打印出來(lái),及每次循環(huán)都會(huì)創(chuàng)建一個(gè)獨(dú)立的{},這樣就好理解啦!!!
如果這個(gè)文章對(duì)你有用的話,歡迎點(diǎn)贊轉(zhuǎn)發(fā)關(guān)注,讓更多的小伙伴看到呀,畢竟分享是一個(gè)程序員最基本的美德!!!