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

一文徹底講通JavaScript普通函數(shù)與箭頭函數(shù)的區(qū)別

 更新時間:2025年10月28日 08:26:36   作者:不做超級小白  
JavaScript中的箭頭函數(shù)和普通函數(shù)在語法和特性上有一些關(guān)鍵的區(qū)別,這篇文章主要介紹了JavaScript普通函數(shù)與箭頭函數(shù)區(qū)別的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

JS中普通函數(shù)和箭頭函數(shù)的區(qū)別

在現(xiàn)代JavaScript開發(fā)中,函數(shù)是最基礎(chǔ)也是最重要的構(gòu)造。隨著ES6的普及,箭頭函數(shù)(Arrow Function)被廣泛使用,但普通函數(shù)(Function Declaration / Function Expression)仍然不可或缺。本文將通過對比示例,全面解析兩者的區(qū)別,并幫你理解在不同場景下如何選擇使用。

1. 語法差異

普通函數(shù)的聲明方式有兩種:

// 函數(shù)聲明
function add(a, b) {
  return a + b;
}

// 函數(shù)表達(dá)式
const multiply = function(a, b) {
  return a * b;
};

箭頭函數(shù)的寫法更加簡潔:

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

總結(jié)

  • 箭頭函數(shù)可以省略 function 關(guān)鍵字。
  • 單行表達(dá)式可以省略大括號和 return。
  • 參數(shù)只有一個時可以省略括號,如:x => x * 2。

2.this指向

這是普通函數(shù)與箭頭函數(shù)最本質(zhì)的區(qū)別。

普通函數(shù)的this

普通函數(shù)的 this 指向調(diào)用它的對象,調(diào)用方式不同,this 也不同:

const obj = {
  name: "Alice",
  greet: function() {
    console.log(this.name);
  }
};

obj.greet(); // Alice

const greetFunc = obj.greet;
greetFunc(); // undefined 或 window / globalThis

箭頭函數(shù)的this

箭頭函數(shù)沒有自己的 this,它會捕獲定義時的外層 this

const obj = {
  name: "Alice",
  greet: () => {
    console.log(this.name);
  }
};

obj.greet(); // undefined

注意:箭頭函數(shù)通常不適合作為對象方法,因為它的 this 并不指向?qū)ο蟊旧怼?/p>

3.arguments對象

普通函數(shù)可以訪問內(nèi)置的 arguments 對象:

function sum() {
  let total = 0;
  for (let i = 0; i < arguments.length; i++) {
    total += arguments[i];
  }
  return total;
}

sum(1, 2, 3); // 6

箭頭函數(shù)沒有自己的 arguments,需要使用 剩余參數(shù)

const sum = (...args) => args.reduce((a, b) => a + b, 0);
sum(1, 2, 3); // 6

4. 可作為構(gòu)造函數(shù)

普通函數(shù)可以用 new 創(chuàng)建實例:

function Person(name) {
  this.name = name;
}
const p = new Person("Alice");
console.log(p.name); // Alice

箭頭函數(shù)不能作為構(gòu)造函數(shù):

const Person = (name) => { this.name = name; };
new Person("Alice"); // TypeError: Person is not a constructor

5.prototype屬性

普通函數(shù)有 prototype,箭頭函數(shù)沒有:

function Foo() {}
console.log(Foo.prototype); // Foo {}

const Bar = () => {};
console.log(Bar.prototype); // undefined

這意味著箭頭函數(shù)不能用來定義類或傳統(tǒng)的原型方法。

6. 什么時候用箭頭函數(shù)

  • 回調(diào)函數(shù):如 mapfilter、forEach
  • 不需要 thisarguments 的函數(shù)
  • 保持函數(shù)體簡潔,減少冗余

示例

const nums = [1, 2, 3];
const squares = nums.map(n => n * n);
console.log(squares); // [1, 4, 9]

7. 總結(jié)對比表

特性普通函數(shù)箭頭函數(shù)
語法function 聲明或表達(dá)式簡潔 ()=>{}
this調(diào)用時決定繼承外層 this
arguments無,需要 ...args
構(gòu)造函數(shù)可使用 new不可使用 new
prototype
適用場景對象方法、構(gòu)造函數(shù)、需要 arguments簡短回調(diào)函數(shù),保持 this 綁定

8. 思考題

  1. 為什么在事件監(jiān)聽中,箭頭函數(shù)可以避免 this 指向 window

    答:普通函數(shù)是動態(tài)綁定,使用的是動態(tài)this;箭頭函數(shù)是詞法綁定,使用的是詞法this,繼承定義時外層作用域的this,可以達(dá)到保持上下文的效果。

  2. 如何在箭頭函數(shù)中訪問外層函數(shù)的 arguments

    答:構(gòu)造閉包使用外層的arguments或使用剩余參數(shù)...args。

  3. 什么時候仍然必須使用普通函數(shù)而不能用箭頭函數(shù)?

    答:需要使用構(gòu)造函數(shù)、動態(tài)this以及arguments參數(shù)等情況下。

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

相關(guān)文章

  • JavaScript?中處理?null和?undefined的常見方法

    JavaScript?中處理?null和?undefined的常見方法

    文章介紹了可選鏈操作符(?.)和空值合并操作符(??)的使用方法,并對比了它們與邏輯非運算符(!)的區(qū)別,還討論了使用寬松比較運算符(==)和自定義函數(shù)來優(yōu)化判斷的幾種方法,以提高代碼的可讀性和性能,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • js自定義回調(diào)函數(shù)

    js自定義回調(diào)函數(shù)

    這篇文章主要介紹了javascript自定義回調(diào)函數(shù),感興趣的小伙伴們可以參考一下
    2015-12-12
  • js網(wǎng)頁中隨意拖動的小方塊實現(xiàn)代碼

    js網(wǎng)頁中隨意拖動的小方塊實現(xiàn)代碼

    用CSS和JS制作的在網(wǎng)頁中可以隨意拖動的小方塊。
    2008-08-08
  • js 獲取元素下面所有l(wèi)i的兩種方法

    js 獲取元素下面所有l(wèi)i的兩種方法

    這篇文章主要介紹了js如何獲取元素下面所有的li,有哪些方法,需要的朋友可以參考下
    2014-04-04
  • layui多圖上傳實現(xiàn)刪除功能的例子

    layui多圖上傳實現(xiàn)刪除功能的例子

    今天小編就為大家分享一篇layui多圖上傳實現(xiàn)刪除功能的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • js 彈簧效果代碼

    js 彈簧效果代碼

    上次做圖片滑動展示效果時做了減速效果,就想做一個加速效果。結(jié)合起來就想到了下面這個東西,當(dāng)然只是類似彈簧,而不是真正的彈簧。
    2008-09-09
  • 微信小程序?qū)崿F(xiàn)下拉選項框

    微信小程序?qū)崿F(xiàn)下拉選項框

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)下拉選項框,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • js實現(xiàn)增加數(shù)字顯示的環(huán)形進度條效果

    js實現(xiàn)增加數(shù)字顯示的環(huán)形進度條效果

    本文主要分享了js實現(xiàn)增加數(shù)字顯示的環(huán)形進度條效果的示例代碼。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • JavaScript運動減速效果實例分析

    JavaScript運動減速效果實例分析

    這篇文章主要介紹了JavaScript運動減速效果,模擬了物體做減速運動的效果,以兩個實例形式分析了javascript實現(xiàn)物體做減速運動的實現(xiàn)技巧,涉及javascript動態(tài)操作頁面元素樣式及數(shù)學(xué)運算的方法,非常簡潔實用,需要的朋友可以參考下
    2015-08-08
  • JavaScript confirm選擇判斷

    JavaScript confirm選擇判斷

    可以判斷confirm選擇了是否
    2008-10-10

最新評論

民乐县| 金山区| 宁城县| 隆回县| 金昌市| 宣武区| 岑巩县| 内乡县| 锡林浩特市| 丹江口市| 四川省| 利川市| 墨江| 弥勒县| 荆州市| 通道| 和平县| 高要市| 临高县| 潮安县| 泾川县| 天台县| 资兴市| 广昌县| 年辖:市辖区| 泾阳县| 利川市| 萨嘎县| 广昌县| 岳池县| 榆林市| 邢台县| 开鲁县| 福安市| 岳阳县| 孝昌县| 南投县| 隆尧县| 玉龙| 凌海市| 河西区|