ES6學習let&const

爲何會出現let和const

爲何要出現let和const呢?確定是var很差(var:呵呵!)。
var存在的問題:
1.變量聲明提高
2.可重複定義
3.全局變量掛載到window上。
這些是js在設計時候的缺點,容易在開發中致使不少錯誤。全局變量掛載到window上不一樣意查找,並且容易覆蓋。
閉包也是很是頭疼的問題,下面例子原本是想打印1,3,5的,然兒會輸出10,10,10。git

var arr = []
    for (var i = 0;i <10;i++) {
        arr[i] = function() {
            console.log(i)
        }
    }
    arr[1]() // 10
    arr[3]() // 10
    arr[5]() // 10
複製代碼

若是使用let就會解決閉包問題,輸出1,3,5github

let arr = []
    for (let i = 0; i < 10; i++) {
        arr[i] = function () {
            console.log(i)
        }
    }
    arr[1]() // 1
    arr[3]() // 3
    arr[5]() // 5
複製代碼

由於var存在這些缺點,因此就出現let來彌補這些缺點了。web

let的優勢:

1.不會出現聲明提高 2.不可重複定義 3.增強做用域的控制 4.配合{}能夠實現塊級做用域:微信

if () {
        // 塊級做用域
    }
    while () {
        // 塊級做用域
    }
    for () {
        // 塊級做用域
    }
    switch () {
        // 塊級做用域
    }
複製代碼

聲明不能提高閉包

{
        let a =10
        {
            //在裏面能夠訪問外面let的變量
            console.log(a) // 10
        }
    }
複製代碼

let會產生臨時性死區,臨時性死區,只要在塊級做用域中let變量,就不會訪問外面同名變量。解決辦法爲從新設置個變量名。異步

{
        let a = 10
        {
            //臨時性死區,只要在塊級做用域中let變量,就不會訪問外面同名變量。解決辦法爲從新設置個變量名。
            console.log(a) //報錯,a沒有被定義
            let a = 20
        }
    }
複製代碼

下面例子會幫助你們加深對let的理解。(能不能加深我也不知道,呵呵!)函數

由於setTimeout是異步加載當函數執行時i就已經變成10了,因此會輸出10個10spa

for(var i = 0;i<10;i ++) {
        setTimeout(() => {
            console.log(i) //輸出10個10
        }, 0);
    }
複製代碼

若是var改爲let就可解決這個問題。設計

for(let i = 0;i<10;i ++) {
        setTimeout(() => {
            console.log(i) //輸出0,1,2...,9
        }, 0);
    }
複製代碼

function形參至關於 var,裏面不可用let重複聲明,能夠用var。code

function na(a,b) {
        let a = 10 //報錯,形參至關於var a
    }
    na()
複製代碼

const講解:

const 是聲明一個常量,聲明以後不可被改變,開發中推薦使用const > let > var(別用var了,哈哈)

const PI = 3.14
    const PI = 111 // 報錯,不可改變
複製代碼

const存儲常量的值不會被改變,可是存儲常量值對應的空間的值能夠被改變

const arr = {}
    arr.name = 'bb'
    console.log(arr) //{name: "bb"}
    arr.name = 'cc'
    console.log(arr) //{name: "cc"}
複製代碼

const除了不可被改變,其餘的和let用法相同。\

有錯誤歡迎指出,謝謝觀看。

廣告:
做者github:github.com/webxukai
做者gitee:gitee.com/webxukai 做者微信:e790134972 做者QQ:我想你應該知道了! 做者QQ郵箱:同上,呵呵!

相關文章
相關標籤/搜索