javascript函式引數引用型別傳遞其實也是一個複製過程
在函式進行值型別引數傳遞的時候,引數會進行一個拷貝,這一點毋庸置疑,看如下程式碼:
[JavaScript] 純文字檢視 複製程式碼var a=1; function func(num){ num=num+1; console.log(num) } func(a); console.log(a);
上面的程式碼的輸出值分別是2和1。值型別資料傳遞的時候,是做了一份拷貝,也就是說會在棧記憶體中重新開闢一個區域儲存拷貝的資料,於是函式外宣告的變數a和傳遞到函式內的資料已經完全互補相關。下面再看一下引用傳遞的程式碼:
[JavaScript] 純文字檢視 複製程式碼var obj={ webName:"螞蟻部落", url:"softwhy.com" } function func(obj){ obj.address="青島市南區"; } func(obj); console.log(obj.address);
上面的程式碼典型的引用傳遞,給函式傳遞的引數是物件的引用,也可以說是物件在堆中的儲存地址。不過在傳遞引數的這個過程也是一個複製過程,會對儲存在棧中的儲存物件引用的變數進行一個拷貝,也就是傳遞到函式中的也是一個全新的資料,只是這個資料指向同一堆中的記憶體地址而已。
相關文章
- JavaScript函式傳遞引數JavaScript函式
- Python的函式引數傳遞:傳值?引用?Python函式
- php函式引用傳遞引數的方法PHP函式
- JavaScript為事件處理函式傳遞引數JavaScript事件函式
- 函式的引數傳遞函式
- 函式作為引數傳遞函式
- 函式引數傳遞及返回函式
- 函式引數 引數定義函式型別函式型別
- TypeScript魔法堂:函式型別宣告其實很複雜TypeScript函式型別
- python中函式的引數傳遞Python函式
- Hellow C# unity學習記錄(7)值型別引用型別以及引數傳遞C#Unity型別
- String型別函式傳遞問題型別函式
- [思] 當需要傳遞多個不定引數時,該如何設計 JavaScript 函式?JavaScript函式
- C#程式設計引用型別和值型別 以及引用傳遞和值傳遞C#程式設計型別
- 引數傳遞方式必須是const引用傳遞
- Python語法—函式及引數傳遞Python函式
- js中 函式引數的 傳值/傳引用 問題JS函式
- Python 序列型別以及函式引數型別Python型別函式
- ABAP 方法呼叫的引數傳遞裡,透過引用傳遞的方式,能修改原始引數值嗎?
- Golang中函式傳參存在引用傳遞嗎?Golang函式
- JavaScript的值傳遞和引用傳遞JavaScript
- 陣列(引用型別)複製問題陣列型別
- 【C語言】函式的概念和函式的呼叫(引數傳遞)C語言函式
- Python3之函式的引數傳遞與引數定義Python函式
- 如何計算PHP函式中傳遞的引數數量PHP函式
- Python 中變數賦值傳遞時的引用和複製介紹Python變數賦值
- Javascript函式引數求值——Thunk函式JavaScript函式
- 從建構函式得到引數型別函式型別
- Go語言引數傳遞是傳值?還是傳引用 ?Go
- Python引數傳遞,既不是傳值也不是傳引用Python
- javascript:引用型別JavaScript型別
- 面試官問:Go 中的引數傳遞是值傳遞還是引用傳遞?面試Go
- JavaScript引用型別-Object型別JavaScript型別Object
- golang拾遺:實現一個不可複製型別Golang型別
- JavaScript 獲取 url 傳遞引數值JavaScript
- 『無為則無心』Python函式 — 26、Python函式引數的傳遞方式Python函式
- javascript複雜型別如何傳參JavaScript型別
- 每天一個 PHP 語法五引用計數與寫時複製的實現PHP
- Typescript複雜型別的宣告:寫一個工具函式庫TypeScript型別函式