ES6 -- let和const

LET和const命令

vares6

  • 變量聲明提高原則數組

  • var語句聲明的變量的做用域是當前執行位置的上下文函數

  • 給一個非聲明變量賦值會隱式建立一個全局變量(全局object的一個屬性),注意這裏是非聲明賦值url

  • 聲明和賦值是兩回事,注意區分,referenceError和undefinedcode

  • 函數執行時,函數內部的變量纔會聲明,而且只聲明一次,不會重複聲明,執行完成後銷燬,函數內調用時爲調用其引用對象

let作用域

  • 和var不一樣,聲明能夠是塊級的,也就是for函數內的n個函數塊,let會聲明n個變量( 每進入一次for花括號就生成了一個塊級域 )get

  • 和var不一樣,重複定義會報錯typeError 若是在子域內重複聲明,是能夠的。io

  • 和var不一樣,沒有變量提高, let聲明以前,該變量都是不可用的。稱之爲: 暫時性死區(temproal dead zone簡稱 TDZ)console

let 塊 提供了一種在塊的範圍內獲取變量的值,而不會影響塊外面名字相同的變量的值的方法

var x = 5;
var y =0;
let(x = x+10, y =12)
 {  //這裏隱式建立了一個包圍 expr 的語句塊。
console.log(x+y);// 27
}
console.log(x + y); // 5

用 var 或 let 聲明的未賦初值的變量,值會被設定爲 undefined

let和var三大區別:
- let聲明的變量只在它所在的代碼塊有效,而非var爲函數做用域
- let不會變量聲明提早,未聲明前使用,直接報錯,var不會報錯undefined
- let回暫時性死區,一旦區塊內let聲明瞭a,全局變量a不會在該區塊起
- let不容許在相同做用域內,重複聲明同一個變量
爲何引進塊級做用域?
- 防止內層變量可能覆蓋外層變量
- for循環的i變量控制循環,防止泄露
塊級做用域
- 使用{}代替當即執行匿名函數(IIFE)
- ES5的嚴格模式規定,函數只能在頂層做用域和函數內聲明,其餘狀況(好比if代碼塊、循環代碼塊)的聲明都會報錯。
- ES6因爲引入了塊級做用域,這種狀況能夠理解成函數在塊級做用域內聲明,所以不報錯,可是構成區塊的大括號不能少,不然仍是會報錯。
const

const 聲明建立一個只讀的常量。這不意味着常量指向的值不可變,而是變量標識符的值只能賦值一次。聲明同時必須賦值。

- 聲明一個只讀的常量。一旦聲明,常量的值就不能改變,這意味着,const一旦聲明變量,就必須當即初始化,不能留到之後賦值。
- const的做用域與let命令相同:
    只在聲明所在的塊級做用域內有效
    const命令聲明的常量也是不提高
    一樣存在暫時性死區,只能在聲明的位置後面使用
    一樣不可重複聲明
- 對於複合類型的變量(例如對象、數組),變量名不指向數據,而是指向數據所在的地址。
    const命令只是保證變量名指向的地址不變,並不保證該地址的數據不變,因此將一個對象聲明爲常量必須很是當心。
    若是真的想將對象凍結,應該使用Object.freeze方法,地址數據也不會變了
變量聲明
- ES6:var/function/let/const/import/class
- ES5:var/function
全局對象的屬性
- var命令和function命令聲明的全局變量,依舊是全局對象的屬性
- let命令、const命令、class命令聲明的全局變量,不屬於全局對象的屬性,eg:`let b = 1; window.b 爲undefined`

book url:http://es6.ruanyifeng.com/#do...

相關文章
相關標籤/搜索