[TOC]
* * * * *
>引入箭頭函數有兩個方面的作用:
更簡短的函數并且 `this` 與詞法作用域里的相同。
### 1. 語法
`PS:argument 參數,簡寫為 arg`
~~~
<1>. (arg1, arg2, …, argN) => { 函數聲明 }
// 這種情況用于不需要返回值,進行一組流程操作的時候;
~~~

~~~
<2>. (arg1, arg2, …, argN) => 表達式(單一)
/* 相當于:(arg1, arg2, …, argN) =>{ return 表達式; }
這個表達式所代表是的值,就是返回值;
如果加了花括號,就不會有返回值了,需要自己添加 return 語句。
*/
~~~

~~~
<4>. 當只有一個參數時,圓括號是可選的:
( 單一參數 ) => { 函數聲明 }
單一參數 => { 函數聲明 }
<5>. 沒有參數的函數應該寫成一對圓括號。() => { 函數聲明 } ,
更合適作為匿名函數
~~~
>[success]如果要返回一個對象,簡寫形式為

### 2. 實例
>[info]例 1:普通函數體內的 this在執行過程中會被動態綁定,有時候會導致麻煩。如下就沒有得到預期的結果。

>[info]例 2:箭頭函數不會創建自己的this;它使用封閉執行上下文的this值(即詞法作用域的 this)。

>[info]例 3:箭頭函數體的閉包( i=0 是默認參數)
~~~
var Add = (i=0) => { return (() => (++i) ) };
var v = Add();
v(); //1
v(); //2
~~~
>[info] 例 4:通過 call 或 apply 調用
~~~
由于 this 已經在詞法層面完成了綁定,
通過 call() 或 apply() 方法調用一個函數時,
只是傳入了參數而已,對 this 并沒有什么影響:
var b = {
base : 2
};
var adder = {
base : 1,
addThroughCall: function(a) {
var f = v => v + this.base;
return f.call(b, a);
// 如果把這里的 b,改為 null 或者 undefined,輸出結果一樣
}
};
console.log(adder.addThroughCall(1));
~~~
>[info] 例 5:箭頭函數沒有 arguments 這個參數對象

~~~
如果想要在不使用 arguments 的情況下獲取參數,就需要用 ES6的一個新特性:
(...arg)=>{
//這里就可以通過 arg[n],來獲取參數
}
~~~
>[info] 例 6:new 操作后面不能用箭頭函數

>[info] 例 7:箭頭函數沒有 原型
