【前端100問】Q58:箭頭函數與普通函數(function)的區(qū)別是什么?構造函數(function)可以使用 new 生成實例,那么箭頭函數可以嗎?為什么?

寫在前面

此系列來源于開源項目:前端 100 問:能搞懂 80%的請把簡歷給我
為了備戰(zhàn) 2021 春招
每天一題,督促自己
從多方面多角度總結答案,豐富知識
箭頭函數與普通函數(function)的區(qū)別是什么?構造函數(function)可以使用 new 生成實例,那么箭頭函數可以嗎?為什么?
簡書整合地址:前端 100 問

正文回答

箭頭函數是普通函數的簡寫,可以更優(yōu)雅的定義一個函數,和普通函數相比,有以下幾點差異:

  1. 函數體內的 this 對象,就是定義時所在的對象,而不是使用時所在的對象(定義時所在的作用域中的 this值,因為 JS 的靜態(tài)作用域的機制,this 相當于一個普通變量會向作用域鏈中查詢結果,同時定義時所在對象也并不等于所在對象中的 this 值。)。
  2. 不可以使用 arguments 對象,該對象在函數體內不存在。如果要用,可以用 rest 參數代替。
  3. 不可以使用 yield 命令,因此箭頭函數不能用作 Generator 函數。
  4. 不可以使用 new 命令,因為:
  • 沒有自己的 this,無法調用 call,apply。
  • 沒有 prototype 屬性 ,而 new 命令在執(zhí)行時需要將構造函數的 prototype 賦值給新的對象的 __proto__

new 過程大致是這樣的:

function newFunc(father, ...rest) {
  var result = {};
  result.__proto__ = father.prototype;
  var result2 = father.apply(result, rest);
  if (
    (typeof result2 === "object" || typeof result2 === "function") &&
    result2 !== null
  ) {
    return result2;
  }
  return result;
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容