var與let、const的區(qū)別lyj

什么是變量提升?

JavaScript 中,函數(shù)及變量的聲明都將被提升到函數(shù)的最頂部。

JavaScript 中,變量可以在使用后聲明,也就是變量可以先使用再聲明。

一)var聲明變量存在變量提升,let和const不存在變量提升

console.log(a);// undefined? ===>? a已聲明還沒(méi)賦值,默認(rèn)得到undefined值vara=100;console.log(b);// 報(bào)錯(cuò):b is not defined? ===> 找不到b這個(gè)變量letb=10;console.log(c);// 報(bào)錯(cuò):c is not defined? ===> 找不到c這個(gè)變量constc=10;

再來(lái)看這段代碼

functionfn(){//var aif(true){console.log(a+' now')}else{vara=1console.log(2)}}fn()// a -> undefined

我們發(fā)現(xiàn)不執(zhí)行的代碼也會(huì)影響會(huì)執(zhí)行的代碼,因?yàn)関ar a會(huì)提升到if語(yǔ)句的前面

undefined可以翻譯為不明確,not defined可以翻譯為未定義

在Java中變量的分為全局變量(成員變量)或者局部變量,在方法體中定義的變量都是局部變量,否則是全局變量(即在方法體外,在類中定義的變量)

在JavaScript中,在方法體外外用var定義的變量其它方法可以共享,在方法中用var定義的變量只有該方法內(nèi)生效。

二)let、const都是塊級(jí)局部變量

顧名思義,就是只在當(dāng)前代碼塊起作用

{leta=1}console.log(a)// undefined

const 的特性和 let 完全一樣,不同的只是

1)聲明時(shí)候必須賦值

consta

編譯器報(bào)錯(cuò)

image

控制臺(tái)報(bào)錯(cuò)

SyntaxError:Missing initializerinconstdeclaration

2)只能進(jìn)行一次賦值,即聲明后不能再修改

consta=1a=2

編譯器報(bào)錯(cuò)

image

控制臺(tái)報(bào)錯(cuò)

TypeError:Assignment to constant variable.

3)如果聲明的是復(fù)合類型數(shù)據(jù),可以修改其屬性

三)同一作用域下let和const不能聲明同名變量,而var可以

consta=2consta=1

SyntaxError:Identifier'b'has already been declared

面試題

簡(jiǎn)單的Demo

for(leti=0;i<5;i++){console.log(i)}

上面的代碼我們知道打印結(jié)果是 0, 1, 2, 3, 4,但是你們有沒(méi)有想過(guò)這個(gè)變量i的作用域到底是什么呢?

有人說(shuō)在這個(gè)for循環(huán)里呀,但是我這里想說(shuō)的是這個(gè)i作用域是在括號(hào)()里。正常的代碼是這樣的:

1.首先這個(gè)變量_i的作用域是在()里才有效的,循環(huán)體里是不能訪問(wèn)到_i的

2.每次循環(huán)的時(shí)候創(chuàng)建一個(gè)i變量,將括號(hào)里的_i賦值到變量i上

3.最后i++后再將變量i的值賦值回_i上

當(dāng)然這個(gè)過(guò)程是很復(fù)雜的,可以用下面代碼理解,但是JS的實(shí)現(xiàn)機(jī)制是很復(fù)雜的,這里想要說(shuō)明的let i的作用域有時(shí)候并不是我們所理解的那樣的。

for(let_i=0;i<5;i++){leti=_i? ? console.log(i)// i++ 先做_i=i}

作者:溫酒居士

鏈接:http://www.itdecent.cn/p/7bf685dbc12e

來(lái)源:簡(jiǎn)書http://www.itdecent.cn/p/7bf685dbc12e

著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容