以前我們?cè)诼暶鲿r(shí)只有一種方法庙睡,就是使用var來進(jìn)行聲明,ES6對(duì)聲明的進(jìn)行了擴(kuò)展荡灾,現(xiàn)在可以有三種聲明方式了舆驶。
字面理解ES6的三種聲明方式:
- var:它是variable的簡(jiǎn)寫,可以理解成變量的意思旬盯。
- let:它在英文中是“讓”的意思台妆,也可以理解為一種聲明的意思。
- const:它在英文中也是常量的意思胖翰,在ES6也是用來聲明常量的接剩,常量你可以簡(jiǎn)單理解為不變的量
var聲明:
var在ES6里是用來升級(jí)全局變量的,我們可以先作一個(gè)最簡(jiǎn)單的實(shí)例萨咳,用var聲明一個(gè)變量a,然后用console.log進(jìn)行輸出懊缺。
var a='I love music';
console.log(a);
我們可以看到 I love music 在控制臺(tái)已經(jīng)被打印出來了。那如何理解它的作用是聲明全局變量那培他?我們用匿名函數(shù)給他進(jìn)行一個(gè)包裹鹃两,然后在匿名函數(shù)中調(diào)用這個(gè)a變量遗座,看看能不能調(diào)用到。
var a="I love music";
window.onload= function(){
console.log(a);
}
可以看到控制臺(tái)輸出了 I love music 俊扳,這證明var確實(shí)是全局的员萍。如果你覺的這個(gè)不夠直觀說明var是全局聲明,還可以用區(qū)塊的方式進(jìn)行調(diào)用測(cè)試拣度,先看下面的代碼碎绎。
var a=2;
{
var a=3;
}
console.log(a);
這時(shí)打印出來的值是多少那?對(duì)抗果,應(yīng)該是3筋帖,因?yàn)関ar是全局聲明的。
let局部聲明
通過兩個(gè)簡(jiǎn)單的例子冤馏,我們對(duì)var的全局聲明有了一定了解日麸。那跟var向?qū)?yīng)的是let,它是局部變量聲明逮光。還是上面的例子代箭,我們?cè)囍趨^(qū)塊里用let聲明。
var a=2;
{
let a=3;
}
console.log(a);
這時(shí)候控制臺(tái)打印出來的值就是2了涕刚。如果我們只在區(qū)塊里聲明嗡综,不再外部聲明,我們打印a時(shí)就會(huì)報(bào)錯(cuò)杜漠,顯示找不到變量极景。
{
let a=3;
}
console.log(a);
上面兩個(gè)例子說明了let是局部變量聲明,let聲明只在區(qū)塊內(nèi)起作用驾茴,外部是不可以調(diào)用的盼樟。
有些剛接觸JavaScript的小伙伴會(huì)疑惑了,我感覺let還沒有var好用锈至,其實(shí)let是防止你的數(shù)據(jù)污染的晨缴,在大型項(xiàng)目中是非常有用處的。現(xiàn)在看一個(gè)循環(huán)的例子峡捡,我們來看一下let的好處击碗。
用var聲明的循環(huán)
for(let i=0;i<10;i++){
console.log('循環(huán)體中:'+i);
}
console.log('循環(huán)體外:'+i);
你執(zhí)行時(shí)會(huì)發(fā)現(xiàn)控制臺(tái)報(bào)錯(cuò)了,找不到循環(huán)體外的i變量棋返。通過兩種聲明的比較延都,可以明白let在防止程序數(shù)據(jù)污染上還是很有用處的雷猪。我們要努力去習(xí)慣用let聲明睛竣,減少var聲明去污染全局空間,在vue的使用中也要注意這點(diǎn)求摇。
const聲明常量
在程序開發(fā)中射沟,有些變量是希望聲明后在業(yè)務(wù)層就不再發(fā)生變化了殊者,簡(jiǎn)單來說就是從聲明開始,這個(gè)變量始終不變验夯,就需要用const進(jìn)行聲明猖吴。
我們來一段用const聲明錯(cuò)誤的代碼,在錯(cuò)誤中學(xué)習(xí)const的特性也是非常好的挥转。
const a="I love music";
var a='我就喜歡聽音樂';
console.log(a);
在編譯這段代碼的過程中海蔽,你就會(huì)發(fā)現(xiàn)已經(jīng)報(bào)錯(cuò),無法編譯了绑谣,原因就是我們const聲明的變量是不可以改變的党窜。const是很好理解的,我就不作過多的解釋說明了借宵。