例行聲明:接下來的文字內容所有來自 Understanding ECMAScript 6,做者是Nicholas C.Zakas,也就是大名鼎鼎的Professional JavaScript for Web Developers(《JavaScript高級程序設計》)的做者。我很喜歡他的寫做風格,因此在看了Understanding ECMAScript 6後試着本身寫篇博客梳理一下,至關於簡單地翻譯和鞏固一下吧。在此特別感謝Nicholas的原創,我只是一個小矮人,站在巨人的肩膀上,因此看到了本來看不到的風景。
原文連接:https://leanpub.com/understan...es6
1: 什麼是箭頭函數?
箭頭函數,顧名思義就是用箭頭(=>來定義的函數,不會用到關鍵字‘function’),例如:函數
let sum = (a, b)=> {return a + b;}
效果等同於:this
var sum = function(a, b){return a + b;}
可是,事實上上面兩個function存在不少不一樣,會在以後的第三點講解。prototype
2: 箭頭函數的多種定義方式
箭頭函數的定義形式有不少種(這也是我不喜歡的一點,呵呵),具體的有:翻譯
1: 什麼狀況下均可以型設計
let sum = (a, b)=>{return a + b;} 這種是最經常使用,最通用的形式。
2: 只有一個參數型code
let self = num1 => {return num1;} 能夠看到相對第一種定義的區別是:沒有用()包圍參數. 這種形式只能夠在這種狀況下用。
3: 沒有參數型生命週期
let functionA = ()=> {return 'hehe';} 當沒有參數時,必需要有'()'。
4: 兩個參數及其以上型ip
let sum = (a, b) => {return a + b;} 當有兩個及其以上的參數時,也必需要用‘()’把參數括起來。
5:沒有return&&沒有{}get
let sum = (a, b) => a + b; 你能夠同時不給return關鍵字和{},效果`等同`於上面的第4種狀況
6: 沒有return && 有{}
let sum = (a, b)=> {a + b;} 這種狀況不等於第5種,這種狀況下`'a+b'`並不會做爲這個函數的返回值,若是你調用這個函數,獲得的結果`‘undefined’`
7: 有return && 沒有{}
let sum = (a, b)=> return a + b; 不要做死,這種寫法直接給你一個syntaxError.
註明,以上的第5,6,7點針對的是函數方法體的部分,不論函數參數是幾個,結果沒有區別;一樣的,第2,3,4點針對的是函數的參數部分,不論函數的方法體怎麼寫,對結果沒有影響。
3: 箭頭函數和通常的非箭頭函數的區別:
1: 沒有this, super, arguments和new.target綁定。一個箭頭函數裏面的這幾個指由包含它的最近的非箭頭函數決定 2: 不能使用new來調用。由於箭頭函數沒有構造方法。 3: 沒有[prototype]屬性。由於不能new一個箭頭函數,因此prototype也不必有了。 4: 不能改變this的值。this的值在這個箭頭函數的整個生命週期裏面都不變。 5: 沒有arguments。你必須經過命名參數和剩餘參數去獲取箭頭函數的參數。 6: 不能有重名參數。非箭頭函數在非嚴格模式下面能夠有重名參數。