es6:箭頭函數

箭頭函數

MDN箭頭函數express

箭頭函數表達式的語法比函數表達式更短,而且沒有本身的this,arguments,super或 new.target。這些函數表達式更適用於那些原本須要匿名函數的地方,而且它們不能用做構造函數。app

語法:函數

(參數1,參數2,..,參數n) =>{函數聲明}
(參數1, 參數2, …, 參數N) => 表達式(單一)
//至關於:(參數1, 參數2, …, 參數N) =>{ return 表達式; }

// 當只有一個參數時,圓括號是可選的:
(單一參數) => {函數聲明}
單一參數 => {函數聲明}

// 沒有參數的函數應該寫成一對圓括號。
() => {函數聲明}
//加括號的函數體返回對象字面表達式:
參數=> ({foo: bar})

//支持剩餘參數和默認參數
(參數1, 參數2, ...rest) => {函數聲明}
(參數1 = 默認值1,參數2, …, 參數N = 默認值N) => {函數聲明}

//一樣支持參數列表解構
let f = ([a, b] = [1, 2], {x: c} = {x: a + b}) => a + b + c;
f();  // 6

引入箭頭函數有兩個方面的做用:this

  • 更簡短的函數而且不綁定this

經過 call 或 apply 調用prototype

  • 箭頭函數沒有本身的this指針,經過 call() 或 apply() 方法調用一個函數時,只能傳遞參數(不能綁定this---譯者注)
  • 他們的第一個參數會被忽略。(這種現象對於bind方法一樣成立---譯者注

不綁定arguments指針

  • 箭頭函數不綁定Arguments 對象。所以,在本示例中,arguments只是引用了封閉做用域內的arguments:rest

    var arguments = [1, 2, 3];
    var arr = () => arguments[0];code

    arr(); // 1對象

    function foo(n) {ip

    var f = () => arguments[0] + n; // 隱式綁定 foo 函數的 arguments 對象. arguments[0] 是 n
     return f();

    }

    foo(1); // 2

  • 箭頭函數不能用做構造器,和 new一塊兒用會拋出錯誤。
var Foo = () => {};
var foo = new Foo(); // TypeError: Foo is not a constructor
  • 箭頭函數沒有prototype屬性。
var Foo = () => {};
console.log(Foo.prototype); // undefined

箭頭函數能夠有一個「簡寫體」或常見的「塊體」。

  • 在一個簡寫體中,只須要一個表達式,並附加一個隱式的返回值。在塊體中,必須使用明確的return語句。

    var func = x => x * x;
    // 簡寫函數 省略return

    var func = (x, y) => { return x + y; };
    //常規編寫 明確的返回值

箭頭函數在參數和箭頭之間不能換行。

var func = ()
           => 1; 
// SyntaxError: expected expression, got '=>'
相關文章
相關標籤/搜索