今天就跟大家聊聊有關(guān)let與var關(guān)鍵字在ES6中有什么區(qū)別,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供鶴崗網(wǎng)站建設(shè)、鶴崗做網(wǎng)站、鶴崗網(wǎng)站設(shè)計(jì)、鶴崗網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、鶴崗企業(yè)網(wǎng)站模板建站服務(wù),十載鶴崗做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
{ var a = 10; let b = 8; } a //10 b // Referenceerror :b is not defined
上面在代碼塊中聲明了兩個(gè)變量并分別賦值輸出到控制臺(tái),結(jié)果a的變量成功輸出,b的輸出結(jié)果產(chǎn)生了報(bào)錯(cuò)。可見,let聲明的變量只在它所在的代碼塊中產(chǎn)生作用。同時(shí),我們也能想到它最好的使用方法就是在for循環(huán)中使用。
下面我們?cè)倥e個(gè)例子來觀察它與 var 之間的區(qū)別:
var a = [ ] for(var i = 0;i<6; i++){ a[i] = function(){ console.log(i); } } console.log("i的值:",i); a[ 4 ]( );
它的輸出結(jié)果為:
i 的值:6
6
為什么是 6 呢?一開始我也被嚇懵逼了,這有悖于我的常識(shí),以往沒注意到的地方,居然這么的low。在我的意識(shí)里結(jié)果應(yīng)該 4,而不是 6 。我想了很久也想不明白,以我這種小白的技術(shù),自然是很難搞懂這種資深技術(shù)宅的問題。所以,我查了很多資料來解決這個(gè)問題,才搞明白。
在for里用 var 聲明的 i 是全局變量,在循環(huán)外部也可以訪問到,在循環(huán)體內(nèi)每次循環(huán)都給 i 重新賦一次值,而 i 卻是屬于全局的,外部的 i 值最終是 6 ,數(shù)組 a[ ]指向的 i 始終都是同一個(gè) i,當(dāng)循環(huán)結(jié)束時(shí) a [ ] 函數(shù)內(nèi)部的 i 就是最終 i 的結(jié)果 6。
如果使用let,聲明的變量只在當(dāng)前代碼塊中起作用
var a = [ ] for(let i = 0;i<6; i++){ a[i] = function(){ console.log(i); } } console.log("i的值:",i); a[ 4 ]( );
它的輸出結(jié)果為:
i 的值:6
5
上面代碼中,變量i是let聲明的,當(dāng)前的i只在本輪循環(huán)有效,所以每一次循環(huán)的i其實(shí)都是一個(gè)新的變量,所以最后輸出的是5。你可能會(huì)問,如果每一輪循環(huán)的變量i都是重新聲明的,那它怎么知道上一輪循環(huán)的值,從而計(jì)算出本輪循環(huán)的值?這是因?yàn)?JavaScript 引擎內(nèi)部會(huì)記住上一輪循環(huán)的值,初始化本輪的變量i時(shí),就在上一輪循環(huán)的基礎(chǔ)上進(jìn)行計(jì)算。
看完上述內(nèi)容,你們對(duì)let與var關(guān)鍵字在ES6中有什么區(qū)別有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。