1. 程式人生 > >ES6中的一些新特性

ES6中的一些新特性

得到 好的 代碼塊 代碼 重復 就是 trac 聲明變量 {}

這兩個命令是ES6的新語法知識。這兩個新的特性解決了ES6中的一些小的“bug”問題。其中包含一些知識:塊級作用域、let命令、const命令、全局對象的屬性。Google V8引擎已經部署了ES6的部分特性。當然,使用Traceur轉碼器、Bebal轉碼器可以將ES6方式編寫的程序轉為ES5.

塊級作用域


一個花括號{}代表一個塊級作用域,作用域嵌套時外層代碼塊不受內層代碼塊的影響,之前的立即執行匿名函數的作用是為了形成局部作用域,防止變量汙染,但是這個新的特性:塊級作用域的出現也就不需要這個函數咯,噢耶!

需要註意:函數本身的作用域,在其所在的塊級作用域中。ES5存在函數提升,不管函數在何處聲明,函數聲明都會提升到當前作用域的頂部,得到執行。但是ES6支持塊級作用域,其內部聲明的函數都不會影響到外部作用的外部。

我們來測試一下之前ES5的var聲明的效果

var name = "aa";
while (true) {
    var name = "bb";
    console.log(name);//bb
    break;
}
console.log(name);//bb

這裏我理解為:while作用域內部的name變量提升到了外部,導致內部的name變量替換了外部作用域中的name變量,所以兩次輸出都是bb。

let命令

JavaScript中聲明變量的方式有三種:var,let,const。var存在變量提升,這是ECMAScript5中的命令,ES5中只有全局作用域和函數作用域。在ES6中才有塊級作用域。
let命令的用法類似var,但是所聲明的變量,只有let命令所在代碼塊內有效。如果不聲明就使用就會報錯,這在語法上稱為“暫時性死區”。不允許在相同作用域內,重復聲明同一個變量。因此,不能在函數內部重新聲明參數

不存在變量提升

const命令

const用來聲明常量,一旦聲明,常量的值就不能改變。
使用時註意:

  • 對常量重新賦值不會報錯,只會默默的失敗。
  • 與let命令相同,只在聲明所在的塊級作用域內有效
  • const命令也不存在提升,只能在聲明的位置後面使用,提前使用同樣會拋出ReferenceError。
  • 同樣不可重復聲明。
  • const命令只是指向變量所在的地址,如果將const變量賦值為一個對象,則此常量儲存的是一個地址,不可變的只是這個地址,但對象本身是可以變的,依然可以為其添加新屬性。如果真的想將對象凍結,應該使用Object.freeze方法。凍結之後,不但不可以修改存儲地址,對象本身的內容也不能被改變。
  • const有一個很好的應用場景:就是當我們引用第三方庫的時候聲明的變量,用const來聲明可以避免未來不小心重名而導致bug。

全局對象的屬性

全局對象是最頂層的對象,在瀏覽器環境指的是window對象,在Node.js指的是global對象。所有的全部變量都是全局對象的屬性。
ES6規定,var命令和function命令聲明的全局變量,屬於全局對象的屬性;let命令,const命令,class命令聲明的全局變量,不屬於全局對象的屬性。

ES6中的一些新特性