參數的本質:詳解 JavaScript 函數的參數

文章導讀:AI 輔助學習前端,包含入門、進階、高級部分前端系列內容,當前是 JavaScript?的部分,瑤琴會持續更新,適合零基礎的朋友,已有前端工作經驗的可以不看,也可以當作基礎知識回顧。

上篇文章中,瑤琴帶大家學習和使用了函數,看了上篇文章即使是小白的你也能自己創建簡單的函數,了解函數的基礎定義和使用,以及函數的作用,這篇文章瑤琴帶大家拆解 javascript 函數中重要的元素之一:函數的參數。本篇文章內容較干,建議配合熱水食用。

函數的參數是在函數定義和調用時用于傳遞信息的一種機制。JavaScript 中的函數可以接受零個或多個參數,這些參數可以用來定制函數的行為。

參數的本質是將實參傳給形參。

1.函數參數的定義

函數參數是在函數聲明或函數表達式中定義的變量,它們被包含在圓括號 () 內。參數的個數可以是零個或多個。

function exampleFunction(param1, param2, param3) {// 函數體
}

2.函數參數的類型

JavaScript 中的函數參數不需要聲明類型,可以接受任意類型的值,包括基本類型和對象。

function add(x, y) {return x + y;
}console.log(add(2, 3)); // 輸出 5
console.log(add("Hello", " World")); // 輸出 "Hello World"

3.默認參數

ES6 引入了默認參數,允許為函數參數指定默認值。


function greet(name = "Guest") {console.log(`Hello, ${name}!`);
}greet(); // 輸出 "Hello, Guest!"
greet("John"); // 輸出 "Hello, John!"
  • 上面的例子給參數 name 設置了一個默認值 Guest,調用函數時沒有傳入參數時會使用默認值

4. 剩余參數

剩余參數允許將不確定數量的參數表示為一個數組。剩余參數使用三個點 ... 后跟一個參數名。這個參數會成為包含了所有傳遞給函數的多余參數的數組。

1.剩余參數提供了更靈活、易讀的方式來處理不定數量的參數。

2.剩余參數是真正的數組,可以直接使用數組的方法。

function sum(...numbers) {
// numbers 是一個包含了所有傳遞給函數的多余參數的數組return numbers.reduce((total, num) => total + num, 0);
}console.log(sum(1, 2, 3, 4, 5)); // 輸出 15

可以將剩余參數與普通參數一起使用,但要確保普通參數位于剩余參數之前

例子:

function exampleFunction(arg1, arg2, ...rest) {console.log(arg1); // 第一個參數console.log(arg2); // 第二個參數console.log(rest); // 剩余的參數數組
}

剩余參數的使用場景:

  • 處理不確定數量的參數:當函數需要接受任意數量的參數時,剩余參數非常有用。

  • 替代 arguments 對象:在ES6之前,通常使用 arguments 對象處理不定數量的參數,而現在剩余參數提供了更靈活、易讀的替代方案。

5. arguments 對象

在函數內部,可以使用 arguments 對象訪問所有傳遞給函數的參數,即使在函數定義時沒有明確列出這些參數。

arguments是每一個函數中獨有的,arguments是不會跨函數的


function showArguments() {for (let i = 0; i < arguments.length; i++) {console.log(arguments[i]);}
}showArguments(1, "two", [3, 4]); // 輸出 1, "two", [3, 4]

注意:

arguments 不是一個真正的數組,它是一個對象。要使用數組方法,需要將其轉換為數組:Array.from(arguments) 或 Array.prototype.slice.call(arguments)。

6. 函數參數的順序

函數參數的順序很重要,調用函數時要按照函數定義的順序傳遞參數。

function fullName(firstName, lastName) {return `${firstName} ${lastName}`;
}console.log(fullName("John", "Doe")); // 輸出 "John Doe"

7.高階函數和回調函數

高階函數(Higher-Order Function):?高階函數是指接受其他函數作為參數或者將函數作為返回值的函數。

JavaScript 中函數是一等公民,因此可以作為參數傳遞給其他函數,也可以從函數返回,所以高階函數在 JavaScript 中非常常見。

// 高階函數示例
function multiplyBy(factor) {return function (number) {return number * factor;};
}const double = multiplyBy(2);
const triple = multiplyBy(3);console.log(double(5)); // 輸出 10
console.log(triple(5)); // 輸出 15
  • 在上面的例子中,multiplyBy 就是一個高階函數,它返回一個新的函數。

回調函數(Callback Function):

回調函數是作為參數傳遞給其他函數的函數,它在異步操作完成或特定事件發生時被調用。在 JavaScript 中,回調函數通常用于處理異步操作,事件處理,或者實現某種延遲執行。

// 回調函數示例
function fetchData(url, callback) {// 模擬異步請求setTimeout(function () {const data = { name: 'John', age: 30 };callback(data);}, 1000);
}function displayData(data) {console.log(data);
}// 調用 fetchData,并傳遞 displayData 作為回調函數
fetchData('https://example.com/api/data', displayData);
  • 在這個例子中,displayData 就是一個回調函數,它在 fetchData 異步操作完成后被調用。

總結:

高階函數 是一個函數,它可以接受函數作為參數,或者返回一個函數。

回調函數 是作為參數傳遞給其他函數的函數,用于在特定事件發生時被調用,通常用于異步編程。

這兩個概念經常一起使用,因為高階函數常常會接受回調函數作為參數。在 JavaScript 中,它們是實現許多復雜功能和處理異步代碼的重要工具。

8.arguments 和剩余參數的區別

  • arguments 對象是一個類數組對象,包含了函數調用時傳遞的所有參數。

  • 剩余參數是一個真正的數組,包含了函數調用時傳遞的多余的參數。

function example() {console.log(arguments); // 輸出類數組對象
}function example2(...rest) {console.log(rest); // 輸出數組
}

區別總結:

  • arguments 是對象,剩余參數是數組。

  • 剩余參數提供了更方便的語法和更好的可讀性。

  • 剩余參數只能出現在函數參數的最后,而 arguments 對象中的參數順序和數量與調用時的參數一致。

這篇文章干活滿滿,對于初學者來說需要一定的時間消化,學習相關知識點時,一定要將文中的例子放在編輯器中執行,自己動手實踐能幫助你更好的理解。如果有什么不理解的地方,可以給我留言,瑤琴一定知無不言。

希望今天的內容對初學前端的朋友有所幫助。也希望每一個初學者都能成為一個優秀的前端開發工程師,加油。

最后啰嗦一句,好記性不如爛筆頭,希望大家在學習的過程中養成做筆記的習慣,形成自己的知識體系。

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

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

相關文章

地理信息系統(GIS)軟件開發

地理信息系統&#xff08;GIS&#xff09;軟件開發是一項復雜且系統性很強的工程&#xff0c;涉及空間數據的采集、管理、分析和展示。以下是一個典型的GIS軟件開發流程&#xff0c;包括各個步驟的詳細說明。北京木奇移動技術有限公司&#xff0c;專業的軟件外包開發公司&#…

面向對象------多態

1.多態的定義 通俗來說&#xff0c;當同一種行為或者事情發生在不同的對象上&#xff0c;這些行為或者事情最終得到的結果不同。 注意&#xff1a;多態要發生在繼承的基礎上。 例如&#xff1a;彩色打印機和黑白打印機。 彩色打印機和黑白打印機是不同的對象&#xff0c;但…

詳細分析Element中的MessageBox基本知識(附Demo)

目錄 前言1. 基本知識2. Demo2.1 確認框2.2 警告框2.3 對話框 3. this.$confirm 前言 詳細知識推薦閱讀&#xff1a;詳細分析Element Plus中的ElMessageBox彈窗用法&#xff08;附Demo及模版&#xff09; MessageBox則常用于Vue2 1. 基本知識 MessageBox 是 Element UI 提供…

Liunx學習隨筆

Linux學習隨筆 一.前期準備1.安裝Vmware Workstation軟件2.下載linux鏡像3.安裝操作系統 夕陽無限好&#xff0c;只是近黃昏&#xff0c;時隔一年&#xff0c;重新提筆 沒有比腳更遠的路&#xff0c;沒有比人更高的山 一.前期準備 1.安裝Vmware Workstation軟件 下載地址&am…

加載頁面 跳轉 新頁面 vue

通常&#xff0c;我們點頁面上的詳情&#xff0c;或者編輯&#xff0c;需要加載一個新的頁面出來。 vue中加載頁面的方法&#xff1a; 在父頁面中&#xff08;通常是某個模塊目錄下的index.vue&#xff09;&#xff0c;先寫這行代碼&#xff1a; import AddEditForm from ./…

南京觀海微電子----升壓和降壓模塊電路解析

(一)升壓模塊 1. 如果是交流電壓升壓&#xff0c;那非常簡單&#xff0c;只要選擇變比合適的變壓器就行(1:3和1:4.17); 2. 如果是直流電壓升壓&#xff0c;從12v升到36v也很容易&#xff0c;可選擇用的開關穩壓器很多&#xff0c;例如 :Cs5171.Cs5172.Cs5173.Cs5174.Mc33063.…

SQLAlchemy備忘

orm備忘 upsert&#xff0c;存在及更新&#xff0c;不存在則插入 from sqlalchemy.dialects.mysql import insertinsert_stmt insert(FileModule).values(file_pathpar_dict.file, module_keypar_dict.module_key,module_namepar_dict.module_name, project_idpar_dict.proj…

【調和級數】100321. 優質數對的總數 II

本文涉及知識點 調和級數 質數、最大公約數、菲蜀定理 LeetCode100321. 優質數對的總數 II 給你兩個整數數組 nums1 和 nums2&#xff0c;長度分別為 n 和 m。同時給你一個正整數 k。 如果 nums1[i] 可以被 nums2[j] * k 整除&#xff0c;則稱數對 (i, j) 為 優質數對&#…

[Android]在后臺線程執行耗時操作,然后在主線程更新UI

1.Coroutines&#xff08;官方推薦&#xff09; Coroutines 提供了一種輕量級的線程管理方式&#xff0c;使得在后臺線程執行任務和在主線程更新 UI 變得簡單。以下是如何在 Kotlin 中使用 Coroutines 來處理耗時邏輯并更新 UI 的步驟&#xff1a; 添加 Coroutines 依賴: 首…

數據結構·一篇搞定隊列!

hello&#xff0c;大家好啊&#xff0c;肖恩又拖更了&#xff0c;你們聽我狡辯&#xff0c;前段時間有期中考試&#xff0c;so我就沒什么時間寫這個&#xff0c;在這給大家道個歉&#x1f62d;&#x1f62d;&#x1f62d; 我后面一定盡力不拖更 那么接下來&#xff0c;我們來看…

Greenplum使用hbase外部表

概述 GP可以通過pxf協議上的hbase外表功能&#xff0c; 在數據庫中創建外部表&#xff0c;映射hbase table&#xff0c;以直接在gp中訪問 hbase數據&#xff0c;方便將hbase的查詢結果集保留在gp中 hbase端準備 HBase基礎概念&#xff1a; ?HBase 列包含兩個組件&#xff1…

粒子輻照環境中相機鏡頭防護及LabVIEW圖像處理注意事項

在粒子輻照環境測試電路板性能的實驗中&#xff0c;需要對相機鏡頭進行有效防護&#xff0c;同時利用LabVIEW進行圖像識別和處理。本文將討論相機鏡頭防護的關鍵因素和LabVIEW處理過程中的注意事項&#xff0c;包括防輻射材料選擇、輻射屏蔽措施、散熱管理、空間布局及LabVIEW軟…

c++11:左值引用和右值引用《全家桶》

總結一下C11中涉及到左值引用和右值引用的場景。 1 左值引用和右值引用的區別 左值引用 定義&#xff1a;對左值的引用。目的是避免內存拷貝&#xff0c;類似c中的指針,兩個場景&#xff1a;函數傳參、函數返回值。 右值引用 定義&#xff1a;對右值的引用。兩個場景&#…

【機器學習-k近鄰算法-01】 | Scikit-Learn工具包進階指南:機器學習sklearn.neighbors模塊之k近鄰算法實戰

&#x1f3a9; 歡迎來到技術探索的奇幻世界&#x1f468;?&#x1f4bb; &#x1f4dc; 個人主頁&#xff1a;一倫明悅-CSDN博客 ?&#x1f3fb; 作者簡介&#xff1a; C軟件開發、Python機器學習愛好者 &#x1f5e3;? 互動與支持&#xff1a;&#x1f4ac;評論 &…

騎行 - 新區永旺出發的環太湖路線

環過好幾次太湖&#xff0c;但對路線都沒太在意&#xff0c;都是跟著別人走的。這次自己制定一個路書&#xff0c;方便下次自己一個人環太湖時使用。 開始是使用高德地圖做路書&#xff0c;只能在PC上做。我用的是網頁版&#xff0c;每次選點太麻煩了。要輸入地址搜索&#xff…

開源博客項目Blog .NET Core源碼學習(27:App.Hosting項目結構分析-15)

本文學習并分析App.Hosting項目中后臺管理頁面的角色管理頁面。 ??角色管理頁面用于顯示、檢索、新建、編輯、刪除角色數據同時支持按角色分配菜單權限&#xff0c;以便按角色控制后臺管理頁面的菜單訪問權限。角色管理頁面附帶一新建及編輯頁面&#xff0c;以支撐新建和編輯…

電纜廠可視化:提升生產透明度與運營效率

圖撲電纜廠可視化系統通過實時監控和數據分析&#xff0c;提高生產過程的透明度和可控性&#xff0c;優化資源配置和質量管理&#xff0c;顯著提升運營效率和產品質量。

啟動SpringBoot項目及解決端口占用問題(指令版)

打包SpringBoot 項目 需要將 SpringBoot 項目進行打包。可以使用 Maven 的快捷工具&#xff0c;或者在項目的 pom.xml 文件所在目錄執行以下命令&#xff1a; mvn clean package部署注意 Windows系統下&#xff0c;按照以下方式在cmd窗口以管理員身份允許使用命令啟動spring…

Flutter 中的 StatefulBuilder 小部件:全面指南

Flutter 中的 StatefulBuilder 小部件&#xff1a;全面指南 在Flutter中&#xff0c;StatefulBuilder是一個高效的小部件&#xff0c;它根據給定的構建函數來構建widget&#xff0c;并在組件樹中只對需要重新構建的部分進行更新。這使得它在性能優化方面非常有用&#xff0c;特…

電子電器架構 - AUTOSAR ON THE AIR

電子電器架構 - AUTOSAR ON THE AIR 我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 屏蔽力是信息過載時代一個人的特殊競爭力,任何消耗你的人和事,多看一眼都是你的不對。非必要不費力證明自己…