JavaScript 簡單類型與復雜類型-復雜類型傳參

在JavaScript中,變量根據其存儲的數據類型可分為簡單類型(基本數據類型)和復雜類型(引用數據類型)。理解這兩者在函數調用時的行為差異對于編寫高效且無誤的代碼至關重要。本文將專注于探討復雜類型的參數傳遞機制,并通過實例說明這些概念的實際應用。

復雜類型簡介

JavaScript中的復雜類型包括:

  • Object
  • Array
  • Function
  • 其他自定義對象

復雜類型的值是按引用傳遞的,這意味著當一個復雜類型的值作為參數傳遞給函數時,實際上是創建了一個新的引用,指向同一個堆內存地址。因此,在函數內部對該對象所做的任何修改都會反映到原始對象上。

參數傳遞機制

按引用傳遞

按引用傳遞意味著函數接收的是實際對象的一個引用。如果在函數內部修改了該對象的內容,這種修改會影響到外部的原始對象。

示例1:對象參數傳遞
function modifyObject(obj) {obj.name = "World";
}let person = { name: "Hello" };
modifyObject(person);
console.log(person.name); // 輸出: World

在這個例子中,person對象被傳遞給modifyObject函數。雖然我們并沒有直接返回修改后的對象,但由于按引用傳遞的特性,函數內部對obj的修改直接影響到了外部的person對象。

示例2:數組參數傳遞
function updateArray(arr) {arr.push(4);
}let numbers = [1, 2, 3];
updateArray(numbers);
console.log(numbers); // 輸出: [1, 2, 3, 4]

同樣地,當我們向函數傳遞一個數組時,函數內部對該數組的任何修改都會影響到原始數組。

實際應用場景

場景1:對象的狀態管理

當你需要在一個函數內部更新對象的狀態時,利用復雜類型的引用傳遞特性是非常有用的。

function addScore(player, points) {player.score += points;
}let player = { name: "Alice", score: 100 };
addScore(player, 50);
console.log(player.score); // 輸出: 150

在這個場景中,player對象的狀態通過addScore函數得到了更新,這展示了復雜類型在狀態管理方面的靈活性。

場景2:數組的操作

處理數組時,經常會遇到需要在函數內部添加、刪除或修改元素的情況。復雜類型的引用傳遞使得這樣的操作變得非常直觀。

function removeFirstElement(arr) {arr.shift();
}let fruits = ['Apple', 'Banana', 'Cherry'];
removeFirstElement(fruits);
console.log(fruits); // 輸出: ['Banana', 'Cherry']

在這個例子中,removeFirstElement函數移除了數組的第一個元素,并且這個改變也反映到了原始數組fruits上。

注意事項

盡管復雜類型是按引用傳遞的,但需要注意的是,傳遞的是對象的引用而不是整個對象本身。這意味著如果你嘗試重新分配傳入的對象,它不會影響到原始對象。

示例3:重新分配對象引用
function replaceObject(obj) {obj = { newName: "New Value" };
}let original = { name: "Original Value" };
replaceObject(original);
console.log(original); // 輸出: { name: 'Original Value' }

在這個例子中,即使我們在replaceObject函數內部試圖替換obj的值,原始對象original并未受到影響。這是因為函數內部的重新賦值只是改變了局部變量obj的引用,而沒有影響到外部對象。

結語

感謝您的閱讀!如果你有任何問題或想分享自己的經驗,請在評論區留言交流!

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

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

相關文章

L2-043 龍龍送外賣(dfs)

龍龍是“飽了呀”外賣軟件的注冊騎手,負責送帕特小區的外賣。帕特小區的構造非常特別,都是雙向道路且沒有構成環 —— 你可以簡單地認為小區的路構成了一棵樹,根結點是外賣站,樹上的結點就是要送餐的地址。 每到中午 12 點&#…

如何基于PyTorch做二次開發

基于PyTorch進行二次開發以實現可視化工程,可以從以下幾個方面入手:模型結構可視化、訓練過程監控、特征可視化等。以下是一些推薦的GitHub項目,這些項目可以幫助你快速搭建一個可視化的工程環境: ### 1. **PyTorch CNN Visualiz…

本地大模型編程實戰(26)用langgraph實現基于SQL數據構建的問答系統(5)

本文將將擴展上一篇文章完成的 langgraph 鏈,繼續使用基于 langgraph 鏈 ,對結構化數據庫 SQlite 進行查詢的方法。該系統建立以后,我們不需要掌握專業的 SQL 技能,可以用自然語言詢問有關數據庫中數據的問題并返回答案。主要完善…

【Kubernetes】污點和容忍

一、概述 在 Kubernetes(k8s)中,污點(Taints) 是定義在節點上的一種機制,用于拒絕某些 Pod 調度到該節點,除非這些 Pod 具有對應的容忍度(Tolerations)。污點可以用來控…

【大模型?知識圖譜】大模型結合醫療知識圖譜:解鎖智能輔助診療系統新范式

【大模型?知識圖譜】大模型結合醫療知識圖譜:解鎖智能輔助診療系統新范式 大模型結合醫療知識圖譜:解鎖智能輔助診療系統新范式引言一、系統架構1.1 系統架構圖1.2 架構模塊說明1.2.1 用戶輸入1.2.2 大模型(語義理解與意圖識別)1.2.3 Agent(問題解析與任務分配)1.2.4 問…

FASIONAD:自適應反饋的類人自動駕駛中快速和慢速思維融合系統

24年11月來自清華、早稻田大學、明尼蘇達大學、多倫多大學、廈門大學馬來西亞分校、電子科大(成都)、智平方科技和河南潤泰數字科技的論文“FASIONAD : FAst and Slow FusION Thinking Systems for Human-Like Autonomous Driving with Adaptive Feedbac…

【免費】YOLO[笑容]目標檢測全過程(yolo環境配置+labelimg數據集標注+目標檢測訓練測試)

一、yolo環境配置 這篇帖子是我試過的,非常全,很詳細【cudaanacondapytorchyolo(ultralytics)】 yolo環境配置 二、labelimg數據集標注 可以參考下面的帖子,不過可能會出現閃退的問題,安裝我的流程來吧 2.1 labelimg安裝 label…

Linux系統軟件管理

systemctl 控制軟件啟動和關閉 Linux系統很多軟件支持使用systemctl命令控制:啟動,停止,開啟自啟。 能被systemctl管理的軟件,一般被稱為:服務。 語法:systemctl start|stop|status|enable|disable 服務名…

CAN總線通信協議學習1——物理層

首先來看看CAN是怎么產生的:簡單理解,CAN就是一種“擁有特別連接方式”的數據傳輸的總線,其有特定的一些規則。 (注:資料及圖片來源于知乎博主TOMOCAT。) CAN總線的結構 查閱參考文獻,OSI標準…

偏移量是什么

在將二維網格映射到一維數組時,偏移量是指在一維數組中 某一行的第一個元素相對于數組起始位置的位置差。對于一個 3 行 4 列的網格,我們使用公式 cur_pos x * n y 來計算二維位置 (x, y) 在一維數組中的索引。 當 x 0 (第一行&#xff…

【Mac電腦本地部署Deepseek-r1:詳細教程與Openwebui配置指南】

文章目錄 前言電腦配置:安裝的Deepseek版本:使用的UI框架:體驗效果展示:本地部署體驗總結 部署過程Ollama部署拉取模型運行模型Openwebui部署運行Ollama服務在Openwebui中配置ollama的服務 后話 前言 deepseek最近火的一塌糊涂&a…

給小白的oracle優化工具,了解一下

有時懶得分析或語句太長,可以嘗試用oracle的dbms_sqldiag包進行sql優化, --How To Use DBMS_SQLDIAG To Diagnose Query Performance Issues (Doc ID 1386802.1) --診斷SQL 性能 SET ECHO ON SET LINESIZE 132 SET PAGESIZE 999 SET LONG 999999 SET SER…

YOLO11改進加入ResNet網絡

文章目錄 1.改進目的2.demo引入2.1代碼2.2 結果展示2.3 BottleNeck詳解 1.改進目的 原始YOLO11模型訓練好以后,檢測結果mAP結果很低,視頻檢測結果很差,于是想到改進網絡,這里介紹改進主干網絡。 2.demo引入 2.1代碼 # File: 2…

Spring MVC流程

SpringMVC啟動流程 啟動流程父子容器請求處理MultipartFile 解析參數傳遞返回值處理HandlerInterceptor 啟動流程 啟動Tomcat解析web.xml創建DispatcherServlet調用DIspatcherServlet的init方法 4.1 創建Spring容器 4.2 發布ContextRefresheEvent 4.3 在OnRefreshed方法中觸發…

【大數據】ClickHouse常見的錯誤及解決方式

ClickHouse 是一款高性能的列式數據庫,但在使用過程中難免會遇到一些錯誤。本文將介紹一些 ClickHouse 常見的錯誤及其解決方式,幫助您更好地使用 ClickHouse。 1、錯誤:DB::Exception 錯誤信息 DB::Exception:Table engine Distributed d…

物理競賽中的線性代數

線性代數 1 行列式 1.1 n n n 階行列式 定義 1.1.1:稱以下的式子為一個 n n n 階行列式: ∣ A ∣ ∣ a 11 a 12 ? a 1 n a 21 a 22 ? a 2 n ? ? ? ? a n 1 a n 2 ? a n n ∣ \begin{vmatrix}\mathbf A\end{vmatrix} \begin{vmatrix} a_{11…

IP-----動態路由OSPF

這只是IP的其中一塊內容,IP還有更多內容可以查看IP專欄,前一章內容為GRE和MGRE ,可通過以下路徑查看IP-------GRE和MGRE-CSDN博客,歡迎指正 注意!!!本部分內容較多所以分成了兩部分在下一章 5.動態路由OS…

數字內容體驗未來趨勢:交互升級與用戶深耕

智能技術重塑內容交互 隨著數字內容體驗進入深度智能化階段,AI驅動的內容生成與智能推薦算法正在重構用戶與信息的交互范式。基于自然語言處理技術的內容創作工具,已實現從文本自動生成到多模態內容適配的跨越,企業能夠以分鐘級速度產出符合…

2025年2月21日優雅草內測分發站全新升級-測試運營-優雅草內測分發站新用戶提供免費100下載點-2月28日正式運營并且提供私有化部署版本

2025年2月21日優雅草內測分發站全新升級-測試運營-優雅草內測分發站新用戶提供免費100下載點-2月28日正式運營并且提供私有化部署版本 說明 優雅草內測分發站新用戶提供免費100下載點,優雅草分運營站和demo測試站 運營站:www.youyacao.cn 提供免費100…

動態內存池設計與環形緩沖區實現詳解

一、動態內存池設計 在嵌入式系統中,頻繁使用 malloc 和 free 會導致內存碎片和性能問題。動態內存池通過預分配固定大小的內存塊,并統一管理分配與釋放,顯著提高內存使用效率和實時性。 1. 核心設計思路 預分配內存:將內存劃分…