欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

1. 語(yǔ)法差異

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

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

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

箭頭函數(shù)的寫(xiě)法更加簡(jiǎn)潔:

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

總結(jié)

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

2.this指向

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

普通函數(shù)的this

普通函數(shù)的 this 指向調(diào)用它的對(duì)象,調(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ù)沒(méi)有自己的 this,它會(huì)捕獲定義時(shí)的外層 this

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

obj.greet(); // undefined

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

3.arguments對(duì)象

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

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

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

箭頭函數(shù)沒(méi)有自己的 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)建實(shí)例:

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ù)沒(méi)有:

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

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

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

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

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

示例

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

7. 總結(jié)對(duì)比表

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

8. 思考題

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

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

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

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

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

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

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

相關(guān)文章

  • Javascript的&&和||的另類(lèi)用法

    Javascript的&&和||的另類(lèi)用法

    這篇文章主要介紹了Javascript的&&和||的另類(lèi)用法,需要的朋友可以參考下
    2014-07-07
  • js+css實(shí)現(xiàn)回到頂部按鈕(back to top)

    js+css實(shí)現(xiàn)回到頂部按鈕(back to top)

    這篇文章主要為大家詳細(xì)介紹了js+css實(shí)現(xiàn)回到頂部按鈕back to top回到頂部按鈕,感興趣的小伙伴們可以參考一下
    2016-03-03
  • [HTML/CSS/Javascript]WWTJS

    [HTML/CSS/Javascript]WWTJS

    [HTML/CSS/Javascript]WWTJS...
    2007-09-09
  • JavaScript?ES6模塊導(dǎo)入和導(dǎo)出的方法

    JavaScript?ES6模塊導(dǎo)入和導(dǎo)出的方法

    ES6在語(yǔ)言標(biāo)準(zhǔn)的層面上實(shí)現(xiàn)了模塊功能,而且實(shí)現(xiàn)的相當(dāng)簡(jiǎn)單,完全可以取代CommonJS和AMD規(guī)范,成為瀏覽器和服務(wù)器通用的模塊解決方案,下面這篇文章主要給大家介紹了關(guān)于ES6模塊導(dǎo)入和導(dǎo)出的方法,需要的朋友可以參考下
    2022-07-07
  • JS?try?catch基本用法以及常見(jiàn)的異常處理

    JS?try?catch基本用法以及常見(jiàn)的異常處理

    JS異常處理的作用是幫助開(kāi)發(fā)者識(shí)別和處理運(yùn)行時(shí)的錯(cuò)誤和異常情況,確保程序在出現(xiàn)問(wèn)題時(shí)能夠優(yōu)雅地降級(jí)或恢復(fù),而不是導(dǎo)致整個(gè)應(yīng)用崩潰或產(chǎn)生不可預(yù)測(cè)的行為,這篇文章主要介紹了JS?try?catch基本用法以及常見(jiàn)的異常處理,需要的朋友可以參考下
    2025-04-04
  • Safari5中alert的無(wú)限循環(huán)BUG

    Safari5中alert的無(wú)限循環(huán)BUG

    猜測(cè)Safari5中將點(diǎn)擊alert框的確定按鈕也當(dāng)成點(diǎn)擊body了。事件一直冒泡到彈出框上。
    2011-04-04
  • bootstrap datetimepicker控件位置異常的解決方法

    bootstrap datetimepicker控件位置異常的解決方法

    這篇文章主要為大家詳細(xì)介紹了bootstrap datetimepicker控件位置異常的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 10種JavaScript最常見(jiàn)的錯(cuò)誤(小結(jié))

    10種JavaScript最常見(jiàn)的錯(cuò)誤(小結(jié))

    這篇文章主要介紹了10種JavaScript最常見(jiàn)的錯(cuò)誤(小結(jié)),查看了數(shù)千個(gè)項(xiàng)目后,發(fā)現(xiàn)了 10 個(gè)最常見(jiàn)的 JavaScript 錯(cuò)誤。我們會(huì)告訴你什么原因?qū)е铝诉@些錯(cuò)誤,以及如何防止這些錯(cuò)誤發(fā)生
    2019-06-06
  • javascript自執(zhí)行函數(shù)之偽命名空間封裝法

    javascript自執(zhí)行函數(shù)之偽命名空間封裝法

    比較之后,我們可以發(fā)現(xiàn),第二方法更加的直觀,易于理解。但是少了封裝過(guò)程,代碼完全裸露在外。
    2010-12-12
  • javascript實(shí)現(xiàn)信息的顯示和隱藏如注冊(cè)頁(yè)面

    javascript實(shí)現(xiàn)信息的顯示和隱藏如注冊(cè)頁(yè)面

    信息的顯示和隱藏在某些時(shí)候還是比較使用的,就比如注冊(cè)信息,下面有個(gè)不錯(cuò)的示例,感興趣的朋友可以了解下
    2013-12-12

最新評(píng)論