ES6部分特性小結

前言

踩着前人的肩膀,努力前行。參考了不少前人的文章。es6

1.變量聲明const和let

es6以前聲明變量只能用var,var的特色是不管聲明在何處,都會被視爲聲明在函數的最頂部(不在函數內即在全局做用域的最頂部)安全

function test(){
    if(false){
        var name = "zhangsan";
    }else{
        console.log(name);  //此處訪問值爲undefined    
    }
    console.log(name);  //此處訪問值爲undefined
}

能夠看到雖然打印結果是undefined,可是並無報錯。那是由於被js編譯過結果就變成了函數

function test(){
    var name;   //這就是js的變量提高
    if(false){
        name = "zhangsan";
    }else{
        console.log(name);  //此處訪問值爲undefined    
    }
    console.log(name);  //此處訪問值爲undefined
}

再來看ES6新增的let,const。它們的做用域只在一個函數內部或者一個代碼塊內部。code

function test() {
    if(flag) {
       let name = 'zhangsan'
    } else {
        //此處訪問會直接報錯。訪問不到。
        console.log(test)
    }
  }

const做用域和let同樣。可是他一般被用於定義常量。就是它的值被設置完成後就不能再修改了。對象

const name = 'lux'
    name = 'joe' // 再次賦值此時會報錯

可是,若是 const 的是一個對象,對象所包含的值是能夠被修改的。抽象一點兒說,就是對象所指向的地址不能改變,而變量成員是能夠修改的。作用域

const student = { name: 'cc' }
    // 能夠成功
    student.name = 'yy';
    // 若是這樣子就會報錯了
    student  = { name: 'yy' };

還有TDZ(暫時性死區)get

{
    console.log(value) // 報錯
    let value = 'lala'
}

咱們都知道,JS引擎掃描代碼時,若是發現變量聲明,用 var 聲明變量時會將聲明提高到函數或全局做用域的頂部。可是 let 或者 const,會將聲明關進一個小黑屋也是TDZ(暫時性死區),只有執行到變量聲明這句語句時,變量纔會從小黑屋被放出來,才能安全使用這個變量。io

2.未完待續

本文基本是參考https://www.jianshu.com/p/287...。原文說的更仔細,有更多的內容。console

相關文章
相關標籤/搜索