箭頭函數和普通函數的區別?

箭頭函數(Arrow Functions)和普通函數(傳統函數)在 JavaScript 中有顯著的區別,主要體現在語法、this?的綁定、構造函數行為、參數處理等方面。以下是詳細對比:

1. 語法差異

  • 普通函數

    function add(a, b) {
    return a + b;
    }

    或函數表達式:

    const add = function(a, b) {
    return a + b;
    };
  • 箭頭函數(更簡潔):

    const add = (a, b) => a + b; // 省略 return 和大括號(單行返回)

    或:

    const add = (a, b) => {
    return a + b;
    };

2.?this?的綁定

  • 普通函數
    • this?是動態綁定的,取決于函數的調用方式。
    • 例如:
      function sayHello() {
      console.log(`Hello, ${this.name}`);
      }
      const person = { name: "Alice" };
      sayHello.call(person); // 輸出 "Hello, Alice"(通過 call 顯式綁定)
  • 箭頭函數
    • 沒有自己的?this,繼承自外層作用域(詞法作用域)。
    • 例如:
      const person = {
      name: "Alice",
      sayHello: function() {
      setTimeout(() => {
      console.log(`Hello, ${this.name}`); // 這里的 this 繼承自 sayHello 的 this
      }, 100);
      },
      };
      person.sayHello(); // 輸出 "Hello, Alice"
    • 如果用普通函數,this?會丟失:
      const person = {
      name: "Alice",
      sayHello: function() {
      setTimeout(function() {
      console.log(`Hello, ${this.name}`); // 這里的 this 是 window/undefined(嚴格模式)
      }, 100);
      },
      };
      person.sayHello(); // 輸出 "Hello, undefined" 或報錯

3. 構造函數

  • 普通函數
    • 可以作為構造函數,用?new?調用:
      function Person(name) {
      this.name = name;
      }
      const alice = new Person("Alice");
  • 箭頭函數
    • 不能作為構造函數,用?new?調用會報錯:
      const Person = (name) => {
      this.name = name; // 報錯:箭頭函數不能用作構造函數
      };
      const alice = new Person("Alice"); // TypeError: Person is not a constructor

4.?arguments?對象

  • 普通函數
    • 有?arguments?對象,包含所有傳入參數:
      function sum() {
      console.log(arguments); // 類似數組的對象
      }
      sum(1, 2, 3); // 輸出 [1, 2, 3]
  • 箭頭函數
    • 沒有?arguments?對象,但可以通過剩余參數(...args)模擬:
      const sum = (...args) => {
      console.log(args); // [1, 2, 3]
      };
      sum(1, 2, 3);

5.?prototype?屬性

  • 普通函數
    • 有?prototype?屬性,可用于添加方法:
      function Person() {}
      Person.prototype.sayHello = function() {
      console.log("Hello");
      };
  • 箭頭函數
    • 沒有?prototype?屬性
      const Person = () => {};
      console.log(Person.prototype); // undefined

6. 適用場景

  • 普通函數
    • 需要動態?this?的場景(如對象方法、事件回調)。
    • 需要作為構造函數。
    • 需要?arguments?對象。
  • 箭頭函數
    • 簡化回調函數(如?mapfiltersetTimeout)。
    • 需要固定?this?的場景(如 Vue/React 中的方法)。
    • 代碼更簡潔。

總結表

特性普通函數箭頭函數
語法function() {}() => {}
this?綁定動態綁定(取決于調用方式)繼承自外層作用域(詞法作用域)
構造函數可以(new?調用)不可以(報錯)
arguments沒有(可用?...args?替代)
prototype沒有
適用場景動態?this、構造函數簡化回調、固定?this

選擇建議

  • 如果需要動態?this?或構造函數,用普通函數。
  • 如果需要簡潔語法或固定?this,用箭頭函數。
  • 在 Vue/React 中,方法通常用箭頭函數或綁定?this,避免?this?丟失問題。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/911926.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/911926.shtml
英文地址,請注明出處:http://en.pswp.cn/news/911926.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux系統日志與守護進程開發實戰指南

Linux系統日志與守護進程開發實戰指南 系統日志與守護進程 ├── 系統日志syslog │ ├── 日志路徑: /var/log/syslog │ └── 核心API │ ├── openlog │ ├── syslog │ └── closelog └── 守護進程daemon└── 創建步驟├── um…

Vue.js 過濾器詳解

Vue.js 過濾器詳解 下面我將詳細講解Vue.js中過濾器的語法和使用注意事項,并提供一個完整的演示頁面。 過濾器基本概念 在Vue.js中,過濾器(Filters) 是用于文本格式化的功能,可以在雙花括號插值和v-bind表達式中使用…

【iOS】iOS崩潰總結

【iOS】iOS崩潰總結 一、前言 之前寫了一篇博文《【Flutter】程序報錯導致的灰屏總結》,瀏覽量、收藏率和點贊量還挺高,還被收錄了,就想著總結一下iOS崩潰,這個也是在iOS面試中經常被問到的。 在 iOS 開發過程中,導致…

機器學習:特征向量與數據維數概念

特征向量與數據維數概念 一、特征向量與維數的定義 特征向量與特征類別 在機器學習和數據處理中,每個樣本通常由多個特征(Feature) 描述。例如,一張圖片的特征可能包括顏色、形狀、紋理等;一個客戶的特征可能包括年齡…

開發基于Jeston Orin Nx 開發版 16G的實現

一、基本配置 1.配置參數 密碼:yahboom Ubuntu 20.04版本、python3.8、CUDA11.4、cuDNN8.6、TensorRT8.5、Jetpack5.1.1、Opencv4.5.4版本 終端輸入命令:sudo jtop 其中Jetpack是英偉達提供的專門供它自己的嵌入式計算機平臺使用的人工智能包。 終…

【技術分享】XR技術體系淺析:VR、AR與MR的區別、聯系與應用實踐

XR技術體系淺析:VR、AR與MR的區別、聯系與應用實踐 作者:EQ 雪梨蛋花湯 本文是技術分享文檔,淺析VR(虛擬現實)、AR(增強現實)、MR(混合現實)的定義、特性、技術演進路線&…

R語言入門課| 05 一文掌握R語言常見數據類型

視頻教程 大家可以先做一做R語言基礎小測驗,看看自己是否需要跟我們5.5h入門R語言的課程。 先上教程視頻,B站同步播出: https://www.bilibili.com/video/BV1miNVeWEkw 完整視頻回放和答疑服務可見:5.5h入門R語言 本節課程視頻…

vRDMA 發布,助力云上 VPC 內高性能通信

資料來源:火山引擎-開發者社區 近日,火山引擎基于部分云服務器實例規格邀測發布 vRDMA 特性,提供云上 VPC 內大規模 RDMA 加速能力,可兼容傳統 HPC 應用、AI 應用以及傳統 TCP/IP 應用,降低大眾化場景的適配門檻&#…

Win10安裝dify

一、win10虛擬化設置,控制面板中開啟如下三個服務 二、檢查確認wls服務開啟 設置自動啟動并啟動 確認服務開啟 bcdedit 是否為auto,如果不是,設置為auto bcdedit /set hypervisorlaunchtype autocpu是否為虛擬化 更新wsl wsl --update二 …

【ai學習筆記】GitLab

CI/CD(持續集成/持續交付)是現代軟件開發中的關鍵實踐,通過自動化工具可以大幅提升開發效率和軟件質量。下面為你介紹CI/CD的核心概念、常用工具以及示例配置: 1. CI/CD 核心概念 持續集成(CI)&#xff1…

Solidity 從 0 到 1 |Web3 開發入門免費共學營

開啟你的 Web3 開發之旅,從 Sonic 開始! 想進入區塊鏈開發的世界,卻不知道從哪里開始?選擇對的語言和平臺,才能事半功倍。 Solidity 是 Web3 中最主流、最通用的智能合約開發語言,被廣泛應用于以太坊及其…

【unitrix】 4.4 類型級整數比較系統(cmp.rs)

一、源碼 這段代碼實現了一個類型級別的整數比較系統,允許在編譯時進行整數比較操作。它定義了一套類型來表示比較結果,并為不同類型的整數實現了比較邏輯。 use core::cmp::Ordering; use core::default::Default; use crate::sealed::Sealed; use cr…

2025年滲透測試面試題總結-2025年HW(護網面試) 14(題目+回答)

安全領域各種資源,學習文檔,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具,歡迎關注。 目錄 1. SQL注入原理 💥 2. XXE攻擊(XML外部實體注入) 🧩 3. SQ…

Android開發根據滑動距離標題欄進行漸變

Android開發根據滑動距離標題欄進行漸變 假設滑動控件是NestedScrollView。 先監聽NestedScrollView的滑動距離: nslv_preview_me.setOnScrollChangeListener(object :NestedScrollView.OnScrollChangeListener{override fun onScrollChange(v: NestedScrollView…

高中成績可視化平臺開發筆記

高中成績可視化平臺(1) 一、項目概述 本系統是一個基于 PyQt5 和 Matplotlib 的高中成績數據可視化分析平臺,旨在幫助教師快速了解學生成績分布、班級對比、學科表現等關鍵指標。平臺支持文科與理科的數據切換,并提供多個維度的圖…

自動化按需導入組件庫的工具rust版本完成開源了

背景 當我為每個Vue項目使用ui組件庫的時候,都會使用按需導入的方式來使用ui組件庫。但是每次按需導入,不可避免的就需要做以下三步。我們以element plus ui組件庫為例。 1. 安裝依賴 第一步,當然是需要安裝依賴。命令如下: pnpm add unp…

Linux內核中TCP分段的核心機制:tcp_fragment函數解析

引言:TCP分段的必要性 在TCP/IP協議棧中,MSS(最大分段大小) 限制了單次傳輸的數據量。當應用層發送的數據超過當前路徑的MSS時,內核必須執行分段操作。tcp_fragment函數正是Linux內核中處理TCP分段的核心機制,它巧妙地在協議合規性、內存安全和性能效率之間取得平衡。 一…

【趙渝強老師】OceanBase OBServer節點的SQL層

OceanBase OBServer節點的SQL層將用戶的SQL請求轉化成對一個或多個Tablet的數據訪問。SQL層會按照以下順序經過一系列組件來處理一個SQL: Parser -->Resolver-->Transformer-->Optimizer-->CodeGenerator-->Executor。視頻講解如下 【趙渝強老師】O…

從“高配”到“普惠”,黑芝麻智能攜手Nullmax打造輔助駕駛主流量產方案

近日,黑芝麻智能攜手Nullmax打造的輔助駕駛主流量產方案正式發布。該方案面向8-15萬元級別主流車型,基于單顆黑芝麻智能武當C1236跨域計算芯片,集成Nullmax全棧自研的軟件技術架構,結合領先的視覺感知算法,打造高性能輔…

信息安全認證體系全解析:從資質證明到行業準入的實踐指南

Hello!大家好,小編是一名專注IT領域的資深探索家,大家發現了嗎?現在刷招聘軟件,國企安全崗必標 "CISP 優先",外企招聘悄悄寫著 "CISSP 加分"—— 這些帶字母的證書到底是啥&#xff1f…