Day 59/100 箭頭函式和普通函式的區別

i辰星發表於2020-09-30

寫在前面的話 

看了資料,才發現之前面試回答的有多扯...

落後捱打,沒毛病啊

(一) 箭頭函式的this指向規則

1、箭頭函式沒有prototype(原型),所以箭頭函式本身沒有this

let a = () =>{};

console.log(a.prototype); // undefined

2、箭頭函式的this指向在定義的時候繼承自外層第一個普通函式的this。

3、不能直接修改箭頭函式的this指向

call顯示繫結this指向失敗了,包括aaply、bind都一樣。

去修改被繼承的普通函式的this指向,然後箭頭函式的this指向也會跟著改變

4、嚴格模式和非嚴格模式下它的this都會指向window(全域性物件)

5、箭頭函式的this指向全域性,使用arguments會報未宣告的錯誤

6、rest引數獲取函式的多餘    引數

這是ES6的API,用於獲取函式不定數量的引數陣列,這個API是用來替代arguments的,API用法如下:

let a = (first, ...abc) => {

  console.log(first, abc); // 1 [2, 3, 4]

};

a(1, 2, 3, 4);

7、使用new呼叫箭頭函式會報錯

 

(二)注意事項

1、一條語句返回物件字面量,需要加括號,或者直接寫成多條語句的return形式,否則像func中演示的一樣,花括號會被解析為多條語句的花括號,不能正確解析

var func1 = () => { foo: 1 }; // 想返回一個物件,花括號被當成多條語句來解析,執行後返回undefined

var func2 = () => ({foo: 1}); // 用圓括號是正確的寫法

var func2 = () => {

  return {

    foo: 1 // 更推薦直接當成多條語句的形式來寫,可讀性高

  };

};

2、箭頭函式在引數和箭頭之間不能換行!

3、箭頭函式的解析順序相對靠前

不適用場景:箭頭函式的this意外指向和程式碼的可讀性。

 

參考連結:

https://www.cnblogs.com/biubiuxixiya/p/8610594.html

https://blog.csdn.net/m0_37686205/article/details/88776259

相關文章