一.ES6基礎(chǔ)-let和const命令

1. let命令

1.1 用法

ES6 新增let命令來聲明變量,它的用法類似于 var,但是let所聲明的變量,僅僅在它聲明的代碼塊里面有效

{
    let a = 10;
    var b = 100;
}
a       //報錯:a is not define
b       //100

1. 2 不存在變量提升

var命令會發(fā)生“變量提升”現(xiàn)象,即變量可以在聲明之前使用,值為undefined。這種現(xiàn)象多多少少是有些奇怪的,按照一般的邏輯,變量應(yīng)該在聲明語句之后才可以使用。

let改變了語法行為,它所聲明的變量一定要在聲明之后才可以使用,否則報錯

console.log(c);         //undefined
//console.log(d);       //報錯
var c = 1000;
let d = 888;

console.log(d);         //888

1.3 區(qū)域綁定

使用 let聲明的變量,就綁定在它所聲明的這個區(qū)域,不受外部的影響

var temp = 'abc';
if(true){
    temp = 123;
    let temp;
}
//報錯:在 Let 聲明的變量,需要在聲明之后才能使用,且外部聲明的temp變量,對語句塊里面聲明的temp變量不會有任何影響

1.4 不允許重復(fù)聲明

let不允許在同一個代碼塊內(nèi),重復(fù)聲明同一個變量

代碼塊重復(fù)聲明示例

因此,也不能在函數(shù)內(nèi)部重新聲明參數(shù)


函數(shù)內(nèi)重復(fù)聲明示例

2. const命令

2.1 用法

const 用來聲明一個只讀的常量,一旦聲明,常量的值就不能發(fā)生變化

const 聲明的變量,必須在聲明的時候就賦值,否則報錯

2.2 與let類似的特性

  • const作用域和let相同:只在聲明的塊級作用域內(nèi)有效

  • constlet一樣不存在變量提升:只能在聲明之后使用

  • constlet一樣,存在區(qū)域綁定:不受外部變量的影響

  • 不可重復(fù)聲明

2.3 const本質(zhì)

const實際保證的不是變量的值不發(fā)生改變,而是變量的內(nèi)存地址不發(fā)生改變

基本的值:基本的值,值就指向它的內(nèi)存地址,所以值的改變就等同于地址的改變

復(fù)合類型(數(shù)組和對象):變量指向的是內(nèi)存地址,至于它的數(shù)據(jù)結(jié)構(gòu),就是不可控制的,即使用const聲明的數(shù)組或者對象,可以隨意的添加和修改內(nèi)在元素,但是不可更改該數(shù)組或?qū)ο蟮闹赶?/strong>

示例1:使用 const 聲明對象,并給其添加屬性值

const聲明對象

示例2:使用const聲明對象,然后將另一個對象賦值給該變量

const變量賦值

2.4 ES6 變量聲明的6種方法

ES5中,變量聲明只有 varfunction兩種方法,

ES6中,添加了 letconst,還有 classimport 兩種命令

3. 頂層對象屬性

頂層對象,在瀏覽器中是指window對象

頂層對象的屬性與全局變量掛鉤,被認為是JavaScript最大的敗筆之一

示例:使用頂層對象聲明的屬性,在全局變量中也可以使用

使用全局變量指定的值,在頂層對象中也可以訪問

頂層對象和全局變量

ES6中規(guī)定,var 和 function命令聲明的全局變量,依舊是頂層對象的屬性。另一方面,let,const,class聲明的全局變量,不再屬于頂層對象的屬性。也就是說,從ES6開始,全局變量和頂層對象屬性會逐漸分開

示例:使用var聲明的全局變量,依舊是頂層對象的屬性

使用 let聲明的全局變量,不再屬于頂層對象的屬性

區(qū)別頂層對象得屬性和全局變量

總結(jié)

  1. ES6新增加了 letconst 命令,用來聲明變量

  2. 使用 let 和 const 聲明的變量

    • 只是在聲明他們的代碼塊里面有效

    • 不存在變量提升

    • 都有區(qū)域綁定,不受外部變量的影響

    • 不可重復(fù)聲明

  3. 使用 const 聲明對象類型的數(shù)據(jù)的時候,注意只要變量的內(nèi)存地址沒有發(fā)生變化,對象中的數(shù)據(jù)可以隨意修改

  4. 區(qū)別頂層對象和全局變量:在ES5中,全局變量認為是頂層對象的屬性,從ES6開始,頂層對象的屬性和全局變量會逐漸分開,通過 let,const,class指令聲明的變量,不再屬于頂層對象的屬性

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

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

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