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
經過 call 或 apply 調用prototype
不綁定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
var Foo = () => {}; var foo = new Foo(); // TypeError: Foo is not a constructor
var Foo = () => {}; console.log(Foo.prototype); // undefined
箭頭函數能夠有一個「簡寫體」或常見的「塊體」。
var func = x => x * x;
// 簡寫函數 省略return
var func = (x, y) => { return x + y; };
//常規編寫 明確的返回值
箭頭函數在參數和箭頭之間不能換行。
var func = () => 1; // SyntaxError: expected expression, got '=>'