最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript箭頭函數(shù)與普通函數(shù)的具體區(qū)別詳細(xì)解析

 更新時間:2026年04月03日 10:20:04   作者:LuckySusu  
箭頭函數(shù)(Arrow Function)是JavaScript在ES6中引入的一種簡化函數(shù)定義的語法,下面這篇文章主要介紹了JavaScript箭頭函數(shù)與普通函數(shù)具體區(qū)別的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

在 JavaScript 中,箭頭函數(shù)(Arrow Function) 是 ES6 引入的一種新的函數(shù)寫法。它不僅簡化了函數(shù)的定義方式,還在作用域綁定、this 指向等方面帶來了顯著差異。

一、一句話總結(jié)

箭頭函數(shù)比普通函數(shù)更簡潔,沒有自己的 this、argumentsprototype,也不可以作為構(gòu)造函數(shù)使用;它的 this 是詞法作用域繼承來的,一旦確定就不會改變。

二、具體區(qū)別對比表

特性普通函數(shù)箭頭函數(shù)
是否有 this 綁定? 有自己的 this? 沒有,繼承外層作用域的 this
是否可以作為構(gòu)造函數(shù)? 可以? 不可以(不能用 new
是否有 arguments 對象? 有? 沒有(可用 ...args 替代)
是否有 prototype 屬性? 有? 沒有
是否支持簡寫語法? 否? 是(參數(shù)和返回值可省略括號/大括號)
this 是否可變? 可變(運行時綁定)? 固定(詞法作用域綁定)

三、詳細(xì)解析

更加簡潔的語法

無參數(shù):

const sayHello = () => console.log('Hello');

單個參數(shù)(可省略括號):

const square = x => x * x;

多個參數(shù)(必須加括號):

const add = (a, b) => a + b;

返回值單行表達式(可省略{}和return):

const double = x => x * 2;

執(zhí)行副作用語句(使用void避免隱式返回):

const fn = () => void someFunction(); // 防止返回值污染

沒有自己的this

這是箭頭函數(shù)最核心的特點之一。

  • 普通函數(shù)中的 this 是動態(tài)的,根據(jù)調(diào)用方式不同而變化;
  • 箭頭函數(shù)中的 this 是詞法作用域繼承的,即定義時就決定了,不會隨調(diào)用方式改變;

示例說明:

var id = 'GLOBAL';
var obj = {
  id: 'OBJ',
  a: function() {
    console.log(this.id);
  },
  b: () => {
    console.log(this.id);
  }
};
obj.a();    // 'OBJ' (this 指向 obj)
obj.b();    // 'GLOBAL'(this 指向外層 window/global)
new obj.a(); // this 指向新對象,輸出 undefined(因為新對象沒有 id)
new obj.b(); // 報錯:Uncaught TypeError: obj.b is not a constructor

?? 結(jié)論:

  • a() 是普通函數(shù),其 this 根據(jù)調(diào)用者動態(tài)綁定;
  • b() 是箭頭函數(shù),this 指向定義時的外層上下文(全局作用域);
  • 箭頭函數(shù)不能作為構(gòu)造函數(shù),所以不能用 new 調(diào)用;

沒有arguments對象

箭頭函數(shù)內(nèi)部無法使用 arguments,但可以通過 ...args 獲取所有參數(shù)。

示例:

const logArgs = (...args) => {
  console.log(args);
};
logArgs(1, 2, 3); // [1, 2, 3]

沒有prototype屬性

function Foo() {}
console.log(Foo.prototype); // {constructor: ...}
const Bar = () => {};
console.log(Bar.prototype); // undefined

因為箭頭函數(shù)不能作為構(gòu)造函數(shù),自然也沒有原型屬性。

不能作為構(gòu)造函數(shù)(不可new)

const Person = () => {};
const p = new Person(); // TypeError: Person is not a constructor

四、應(yīng)用場景建議

場景推薦使用原因
方法或回調(diào)中需要綁定 this? 箭頭函數(shù)自動繼承外層 this,避免 .bind(this) 或保存 that = this
構(gòu)造函數(shù)、類方法? 箭頭函數(shù) ? 普通函數(shù)箭頭函數(shù)不能作為構(gòu)造函數(shù),也無法綁定 this 到實例
需要 arguments 的場景? 箭頭函數(shù) ? 普通函數(shù)(或使用 ...args箭頭函數(shù)不支持 arguments
需要 prototype 的場景? 箭頭函數(shù) ? 普通函數(shù)箭頭函數(shù)沒有 prototype

五、一句話總結(jié)

箭頭函數(shù)是現(xiàn)代 JavaScript 中非常實用的語法糖,適合用于不需要自身 this、arguments 或構(gòu)造功能的場景。但在需要構(gòu)造函數(shù)、動態(tài) this 或訪問 arguments 的情況下,應(yīng)優(yōu)先使用普通函數(shù)。

進階建議

  • 在 Vue / React 中,組件方法推薦使用箭頭函數(shù)自動綁定 this;
  • 使用 TypeScript 可以幫助你更好地理解函數(shù)類型和 this 的指向;
  • 使用 ESLint 規(guī)則防止誤將箭頭函數(shù)當(dāng)作構(gòu)造函數(shù)使用;
  • 結(jié)合 class 使用箭頭函數(shù)字段,可以自動綁定 this(如 class MyClass { myMethod = () => {} });

到此這篇關(guān)于JavaScript箭頭函數(shù)與普通函數(shù)的具體區(qū)別詳細(xì)解析的文章就介紹到這了,更多相關(guān)js箭頭函數(shù)與普通函數(shù)的區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaScript日期時間格式化函數(shù)分享

    JavaScript日期時間格式化函數(shù)分享

    這篇文章主要介紹了JavaScript日期時間格式化函數(shù)分享,需要的朋友可以參考下
    2014-05-05
  • 基于JS+Canvas的lucky-canvas?抽獎功能

    基于JS+Canvas的lucky-canvas?抽獎功能

    一個基于?Js?+?Canvas?的大轉(zhuǎn)盤和九宮格和老虎機抽獎,使用lucky-canvas?功能可以自由配置,多端適配的特點,本文通過實例代碼給大家詳細(xì)介紹抽獎方法,感興趣的朋友一起看看吧
    2022-06-06
  • video.js使用改變ui過程

    video.js使用改變ui過程

    這篇文章主要介紹了video.js使用改變ui的過程,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-03-03
  • js文字橫向滾動特效

    js文字橫向滾動特效

    這篇文章主要介紹了js文字橫向滾動特效,實現(xiàn)過程很簡單,文字在某塊區(qū)域內(nèi)橫向無間隙滾動,感興趣的小伙伴們可以參考一下
    2015-11-11
  • 分享ES6?20個經(jīng)常使用技巧

    分享ES6?20個經(jīng)常使用技巧

    這篇文章主要分享ES6?20個經(jīng)常使用技巧,作用是使JavaScript語言可以用來編寫復(fù)雜的大型應(yīng)用程序,成為企業(yè)級開發(fā)語言,具體使用詳情需要的小伙伴可以參考下面文章內(nèi)容
    2022-06-06
  • 跨域請求兩種方法 jsonp和cors的實現(xiàn)

    跨域請求兩種方法 jsonp和cors的實現(xiàn)

    這篇文章主要介紹了跨域請求兩種方法 jsonp和cors的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • 生成html靜態(tài)文件后的分頁(客戶端版)

    生成html靜態(tài)文件后的分頁(客戶端版)

    生成html靜態(tài)文件后的分頁(客戶端版)...
    2006-07-07
  • Javascript中prototype與__proto__的關(guān)系詳解

    Javascript中prototype與__proto__的關(guān)系詳解

    這篇文章主要給大家介紹了關(guān)于Javascript中prototype與__proto__的關(guān)系的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • JS中onpropertychange和onchange事件區(qū)別小結(jié)

    JS中onpropertychange和onchange事件區(qū)別小結(jié)

    當(dāng)一個HTML元素的屬性用js改變的時候,都能通過onpropertychange來捕獲。例如一個文本text對象的value屬性被頁面的腳本修改的時候,onchange無法捕獲到,而onpropertychange卻能夠捕獲。
    2010-07-07
  • js正則表達式簡單校驗方法

    js正則表達式簡單校驗方法

    在本篇文章里小編給大家整理了一篇關(guān)于js正則表達式簡單校驗方法,有需要的朋友們可以參考下。
    2021-01-01

最新評論

炉霍县| 盐城市| 洛宁县| 呼和浩特市| 静海县| 宕昌县| 济宁市| 武清区| 永定县| 仁寿县| 车致| 南安市| 通城县| 裕民县| 巴林右旗| 金川县| 桂林市| 遵化市| 高台县| 巨鹿县| 西畴县| 开平市| 台前县| 福鼎市| 云林县| 灵石县| 石嘴山市| 鄂托克前旗| 英德市| 北碚区| 福贡县| 绥宁县| 崇义县| 府谷县| 岚皋县| 镶黄旗| 云浮市| 北辰区| 德兴市| 吴旗县| 安徽省|