2.箭頭函數

箭頭函數

寫法靈活

const numbers = [2, 4, 7, 89, 234];

const double = numbers.map(function (number) {
    return number * 2;
});

const double2 = numbers.map((number) => {
    return number * 2;
});

console.log(double2);

以上,兩種語法, doubledouble2 結果一樣。

簡而言之:

  • 刪掉 function 關鍵字
  • 加上一個 => 箭頭
  • 沒有參數加 ()
  • 一個參數可選擇加 ()
  • 多個參數 , 分隔

隱式返回

顯示返回就是 return 關鍵字加上后面返回的內容

箭頭函數中的隱士返回就是可以把 renturn 省略掉,去掉花括號 {}

const double2 = numbers.map(number => number * 2);

this

const Dp = {
    name: 'Dp',
    hobbies: ['Coding', 'Sleeping', 'Reading'],
    printHobbies: function () {
        this.hobbies.map(function (hobby) {
            console.log(`${this.name} loves ${hobby}`);
        });
    }
}
Dp.printHobbies();

以上,結果是

undefined loves Coding
undefined loves Sleeping
undefined loves Reading

原因 this 是在運行的時候綁定的,在以上 map 方法中的回調函數是一個獨立的函數,當一個函數獨立運行的時候,不是被作為對象的方法調用,也沒有通過當沒有 apply , bind , call 改變 this 值的話,這時候的 this 指向window`。

所以我們可以改寫

var self = this;
this.hobbies.map(function (hobby) {
    console.log(`${self.name} loves ${hobby}`);
});

達到想要的效果。

我們還可以利用箭頭函數的便利

this.hobbies.map(hobby => console.log(`${this.name} loves ${hobby}`));

這是因為箭頭函數沒有自己的 this 值,他的 this 值是繼承父級作用域的,與我們之前接觸的 this 值是在執行時動態指定的不同,箭頭函數的 this 值是詞法作用域,也就是在定義的時候就指定的,而且以后也不會隨調用方法的改變而改變。

不適用場景

  • 作為構造函數,一個方法需要綁定到對象
  • 當你真的需要this的時候
  • 需要使用arguments對象的
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容