箭頭函數及其與普通函數區別的詳細解釋

一、箭頭函數的基本特性

  1. 語法簡潔性
    箭頭函數使用 => 符號定義,省略 function 關鍵字,適合快速定義匿名函數或簡單表達式。
// 普通函數
function sum(a, b) { return a + b; }
// 箭頭函數
const sum = (a, b) => a + b;

若函數體為單行表達式,可省略 {}return

  1. 匿名性
    箭頭函數均為匿名函數,不能通過 function 命名。

  2. 隱式返回對象
    返回對象字面量時需用 () 包裹,避免與函數體的大括號沖突:

const getObj = id => ({ id: id });  // 正確

二、this 指向的核心差異

  1. 普通函數的 this

    • 動態綁定:根據調用方式確定 this(如對象方法調用、構造函數調用等)。

    • 可通過 callapplybind 顯式修改 this 指向。

  2. 示例?:

const obj = {value: 10,getValue: function() { return this.value; }
};
obj.getValue(); // 10(this指向obj)
  1. 箭頭函數的 this

    • 詞法綁定?:在定義時捕獲外層非箭頭函數的 this,且無法通過調用方式改變。

    • **無自身 this**:相當于“繼承”父級上下文的 this

  2. 示例?:

function Timer() {this.seconds = 0;// 箭頭函數捕獲外層Timer的thissetInterval(() => this.seconds++, 1000); 
}
const timer = new Timer(); // this.seconds每秒自增

三、箭頭函數與普通函數的其他區別


四、this 的具體應用場景對比

  1. 對象方法

    • 普通函數?:this 指向調用對象。
    const obj = {value: 10,getValue() { return this.value; }  // 返回10
    };
    
    • 箭頭函數?:this 指向外層作用域(如全局 window)。
    const obj = {value: 10,getValue: () => this.value         // 返回undefined(全局無value)
    };
    
  2. 事件處理函數

    • 普通函數?:this 指向觸發事件的 DOM 元素。

    • 箭頭函數?:this 指向定義時的外層作用域(可能不符合預期)。

  3. 高階函數(如 mapsetTimeout)?
    優先使用箭頭函數避免 this 丟失:

// 傳統函數需綁定this
arr.map(function(item) { return item * this.factor; }.bind(this));
// 箭頭函數自動捕獲外層this
arr.map(item => item * this.factor);

五、適用場景總結

  • 優先使用箭頭函數?:

    • 需要固定 this 的場景(如回調函數、事件處理)。

    • 簡化單行表達式(如數組操作 map/filter)。

  • 避免使用箭頭函數?:

    • 對象方法、構造函數、需要 arguments 的場景。

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

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

相關文章

el-scrollbar 獲取滾動條高度 并將滾動條保持在低端

首先我們用ref綁定一個 scrollbar <el-scrollbar style"height: 100%;" ref"chatScrollRef" scroll"scrollTest">用scroll觸發滾動事件&#xff0c;一路滾到最底下&#xff0c;觀察三個屬性 const scrollTest ({scrollTop}) > {conso…

MyBatis-Plus 的 updateById 方法不更新 null 值屬性的問題

項目場景&#xff1a; 使用Mybatis-plus的updateById去更新實體類的時候&#xff0c;如果設置實體類中的某個字段為null&#xff0c;會導致為null的字段不做更新操作 問題描述 updateById方法 不會更新null值 解決方案&#xff1a; 在字段上加上 TableField(updateStrategy …

STC89C52單片機模擬實現洗衣機控制 Proteus仿真

用直流電機轉動模擬洗衣機。要求有弱洗、普通洗、強洗三種模式,可通過按鍵選擇相應模式。要求能夠設置洗衣時長,可以通過按鍵選擇15、30、45、60、90分鐘。定時結束時蜂鳴器報警提示。LCD顯示相關信息。 基本功能描述用單片機模擬實現洗衣機控制。用直流電機轉動模擬洗衣機運…

游戲引擎學習第290天:完成分離渲染

game_sim_region.cpp&#xff1a;在BeginSim中移除EntityOverlapsRectangle調用 現在我們接近一個關鍵點&#xff0c;雖然還沒完全結束&#xff0c;但我們已經把所有東西遷移到了一個新概念上——即那些臨時創建的控制器結構&#xff0c;稱為“腦”&#xff08;brains&#xf…

JavaScript性能優化實戰(12):大型應用性能優化實戰案例

在前面的系列文章中,我們探討了各種JavaScript性能優化技術和策略。本篇將聚焦于實際的大型應用場景,通過真實案例展示如何綜合運用這些技術,解決復雜應用中的性能挑戰。 目錄 電商平臺首屏加載優化全流程復雜數據可視化應用性能優化案例在線協作工具的實時響應優化移動端W…

Linux 安裝 Unreal Engine

需要對在unreal engine官網進行綁定github賬號&#xff0c;然后到unreal engine github倉庫中進行下載對應的版本&#xff0c;并進行安裝unreal engine官網 github地址

2.2.4

import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error, r2_score import joblib from xgboost import XGBRegressor # 加載數據集 file_path 大學…

使用IDEA創建Maven版本的web項目以及lombok的使用

1.新建項目 2.修改pom.xml 3.修改項目結構 4.在main/java下面寫一個Servlet測試一下 然后當前頁面往下滑 -Dfile.encodingUTF-8編寫一句輸出語句&#xff0c;測試是否成功部署配置&#xff0c;并選擇到正確的位置&#xff1a; 回車以后 再回到idea里面&#xff0c;發現控…

【數據結構】1-3 算法的時間復雜度

數據結構知識點合集&#xff1a;數據結構與算法 ? 知識點 ? 時間復雜度的定義 1、算法時間復雜度 事前預估算法時間開銷T(n)與問題規模 n 的關系&#xff08;T 表示 “time”&#xff09; 2、語句頻度 算法中語句的執行次數 對于以上算法&#xff0c;語句頻度&#xff1a;…

【Python 算法零基礎 3.遞推】

壓抑與痛苦&#xff0c;那些輾轉反側的夜&#xff0c;終會讓我們更加強大 —— 25.5.16 一、遞推的概念 遞推 —— 遞推最通俗的理解就是數列&#xff0c;遞推和數列的關系就好比 算法 和 數據結構 的關系&#xff0c;數列有點像數據結構中的線性表(可以是順序表&#xff0c;也…

淘寶扭蛋機系統開發前景分析:解鎖電商娛樂化新藍海

在電商行業競爭日益白熱化的當下&#xff0c;如何通過創新玩法提升用戶粘性、激活消費潛力&#xff0c;成為平臺突破增長瓶頸的關鍵。淘寶扭蛋機系統作為“電商娛樂”的跨界融合產物&#xff0c;正憑借其趣味性、隨機性和社交屬性&#xff0c;成為撬動年輕消費市場的潛力工具。…

NHANES指標推薦:UHR

文章題目&#xff1a;Elevated log uric acid-to-high-density lipoprotein cholesterol ratio (UHR) as a predictor of increased female infertility risk: insights from the NHANES 2013-2020 DOI&#xff1a;10.1186/s12944-025-02521-w 中文標題&#xff1a;對數尿酸與高…

【c庫主要功能】

1 stdio.h 功能&#xff1a;處理文件和標準輸入/輸出流的各種函數和類型 包含變量&#xff1a; size_t&#xff1a;無符號整形&#xff0c;sizeof關鍵字的結果FILE&#xff1a;文件流類型&#xff0c;適合存儲文件流信息的對象類型 庫宏&#xff1a; stderr、stdin、stdout&a…

npm 報錯 gyp verb `which` failed Error: not found: python2 解決方案

一、背景 npm 安裝依賴報如下錯&#xff1a; gyp verb check python checking for Python executable "python2" in the PATH gyp verb which failed Error: not found: python2 一眼看過去都覺得是Python環境問題&#xff0c;其實并不是你python環境問題&#xf…

常見的請求頭(Request Header)參數

1. Accept 作用&#xff1a;告知服務器客戶端支持的響應數據格式&#xff08;如 JSON、XML、HTML&#xff09;。示例&#xff1a;Accept: application/json&#xff08;優先接收 JSON 格式數據&#xff09;。 2. Content-Type 作用&#xff1a;說明請求體的數據格式&#xff08…

計算機網絡:移動通信蜂窩網絡指的是什么?

無線基站的蜂窩網絡(Cellular Network)是現代移動通信系統的核心架構,其核心思想是通過蜂窩狀小區劃分和頻率復用,實現廣域覆蓋、高效頻譜利用和動態資源管理。以下從設計原理、網絡架構、關鍵技術及實際挑戰等方面深入解析蜂窩網絡。 一、蜂窩網絡的設計原理 1. 蜂窩結構…

【AI論文】對抗性后期訓練快速文本到音頻生成

摘要&#xff1a;文本到音頻系統雖然性能不斷提高&#xff0c;但在推理時速度很慢&#xff0c;因此對于許多創意應用來說&#xff0c;它們的延遲是不切實際的。 我們提出了對抗相對對比&#xff08;ARC&#xff09;后訓練&#xff0c;這是第一個不基于蒸餾的擴散/流模型的對抗加…

Word文檔圖片和圖表自動添加序號

0 Preface/Foreword Word文檔是辦公常用的文檔&#xff0c;里面經常會插入圖片或者表格&#xff0c;當表格和圖片數量過多時&#xff0c;如果有些圖片需要刪除或者添加&#xff0c;那么大概率需要修改大量圖片的序號或者引用記錄&#xff0c;如果通過手工一個一個修改&#xf…

軟件架構設計--期末復習

質量屬性 參考視頻&#xff1a;【13.5質量屬性-架構評估】 在軟件架構中&#xff0c;質量屬性是衡量系統設計優劣的關鍵指標&#xff0c;通常分為運行時屬性和非運行時屬性。以下是一些常見的質量屬性&#xff1a; 一、軟件架構中的質量屬性 運行時屬性&#xff1a; 性能&am…

多指標組合策略思路

一種基于多種技術指標和日歷因素的綜合交易策略&#xff0c;旨在通過復雜的條件判斷來預測市場的短期走勢&#xff0c;并據此進行買賣操作。 策略概述 該策略的核心思想是通過結合多個技術指標和日歷因素來判斷市場的短期趨勢&#xff0c;并在合適的時機進行買入或賣出操作。 具…