ES6的箭頭函式作用
- 箭頭函式使得表示式更簡潔
const square = n => n * n;
const isEven = n => n % 2 === 0;
複製程式碼
- 簡化回撥函式
// 正常函式寫法
[1, 2, 3].map(function(x) {
return x * x;
})
// 箭頭函式寫法
[1, 2, 3].map(x => x * x);
複製程式碼
- 改變this指向。箭頭函式函式體內的this物件,就是定義時所在的物件,而不是使用時所在的物件。
function foo() {
setTimeout(() => {
console.log('id:', this.id);
}, 100);
}
var id = 21;
foo.call({ id: 42 });
// id: 42
複製程式碼
箭頭函式的this指向的是誰
- 首先,this的繫結機制,也就是this的繫結規則,由於繫結機制較複雜,不詳細說明,此處列舉下this幾種繫結規則的優先順序:
- new繫結 > 顯式繫結 > 隱式繫結 > 預設繫結
- 其次,箭頭函式並不會使用以上四條標準,而是根據當前的詞法作用域來決定this,具體來說,就是箭頭函式會繼承外層函式呼叫的this繫結(無論this繫結的是什麼)。
什麼時候不適合使用箭頭函式
- 箭頭函式適合於無複雜邏輯或者無副作用的純函式場景下,例如用在map、reduce、filter的回撥函式定義中
- 當我們需要執行上下文的時候,就不適合使用箭頭函式了,例如:定義物件方法、定義原型方法、定義建構函式、定義事件回撥函式
- 不要在最外層定義箭頭函式,因為在函式內部操作this會很容易汙染全域性作用域。最起碼在箭頭函式外部包一層普通函式,將this控制在可見的範圍內
- 箭頭函式優勢之一是簡潔。在有多層函式巢狀的情況下,箭頭函式的簡潔性並沒有很大的提升,反而影響了函式的作用範圍的識別度,這種情況不建議使用箭頭函式
vue的鉤子函式可以用箭頭函式形式麼,用箭頭函式的話,this繫結的是什麼
- vue的鉤子函式中不適合使用箭頭函式
- 原因:會丟失this對當前元件例項的繫結,從而使得元件對應的一些方法或資料不可使用
- 此時this繫結到undefined
let和var的區別
專案 | var | let |
---|---|---|
作用域 | - | let 命令所在程式碼塊內 |
變數提升(即變數可以在宣告之前使用,值為undefined) | 存在變數提升 | 不存在變數提升 |
暫時性死區 | 不存在 | 存在 |
重複宣告 | 重複宣告不報錯 | 不允許重複宣告,重複宣告報錯 |
常用es6特性
let
const
global
- 解構賦值
promise
...
運算子- 箭頭函式
參考: