近半個月找工做一來,都會常常被問到es6新增特性的問題,例如箭頭函數、模板等等,在之前剛接觸es6的新語法是,也是隻是知道大概知道怎麼用而已,也沒有深刻的去理解背後的含義。因此挺吃虧的,後面瞭解了一下,es6終歸屬於新語法,仍是有存在瀏覽器兼容的問題,通常的話在框架裏面是有比較多一點。在學習es6以前,得先了解一下何爲es6:es6全稱是ECMAScript 6.0,是 JavaScript 語言的下一代標準,已經在 2015 年 6 月正式發佈了。它的目標,是使得 JavaScript 語言能夠用來編寫複雜的大型應用程序,成爲企業級開發語言。node
const 定義的是常量,也就是不可改變值的變量,像是在node.js裏面獲取到某一個模塊,最好就是使用const定義爲常量,以下面例子,獲取到路徑模塊es6
const path = require("path");瀏覽器
let 用於定義局部變量,只在定義改變量所在的代碼塊內有效,與var不相同的是,使用var聲明的變量能夠在全局範圍內訪問到這個變量,最簡單的例子就是for循環。框架
var a = []; for (var i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[6]();
在這個例子中,輸出來的數字是 10,若是說當循環體的 i 變量是用let定義的話,那結果就不同了,就是6。也就是說,變量i
是let
聲明的,當前的i
只在本輪循環有效,因此每一次循環的i
其實都是一個新的變量,因此最後輸出的是6
。另外,使用let定義的變量,是不存在變量提高的,也就是說不能先使用變量再定義,這是會保存的。函數
ES6容許使用「箭頭」(=>
)定義函數。學習
var f = v => v
上面語法等同於ui
var f = function (v) { return v }
var f = () => { return 5 }
(1)函數體內的this
對象,就是定義時所在的對象,而不是使用時所在的對象,緣由是箭頭函數根本沒有本身的this
,致使內部的this
就是外層代碼塊的this
。this
(2)不能夠看成構造函數,也就是說,不可使用new
命令,由於它沒有this
,因此也就不能用做構造函數。spa
(3)不可使用arguments
對象,該對象在函數體內不存在。若是要用,能夠用Rest參數代替。prototype
(4)不可使用yield
命令,所以箭頭函數不能用做Generator函數。
不能被用做構造函數:沒有內部方法
[[Construct]]
(該方法容許普通的函數經過 new
調用),也沒有 prototype
屬性。所以, new (() => {})
會拋出錯誤。
除此以外還有module、export、import、class等新增內容,Javascript愈來愈接近面向對象的語言。