js函式引數值傳遞和引用傳遞簡單介紹
在javascript中,函式引數的傳遞分為值型別傳遞和引用型別傳遞,下面就分別通過程式碼例項做一下介紹。
一.值型別傳遞:
值型別的資料儲存在棧中,看如下程式碼:
[JavaScript] 純文字檢視 複製程式碼var num=5;
宣告一個值型別的變數的時候,會在棧中自動分配此變數型別佔用的記憶體空間,並儲存這個變數所包含的值。
下面來看一個關於值型別傳遞的程式碼例項:
[JavaScript] 純文字檢視 複製程式碼function done(num){ num+=10; return num; } num=10; console.log(done(num)); console.log(num);
上面的程式碼會分別輸出20和10,下面分析一下為什麼會出現這種情況。
值型別的傳遞,其實就是對棧中的資料做了一個拷貝,外面宣告的變數num和傳遞的引數雖然具有相同的值,但是兩個資料分別被儲存在不同的記憶體地址中,所以兩者互不相關。
二.引用型別傳遞:
先看一段程式碼例項:
[JavaScript] 純文字檢視 複製程式碼var obj={ webName:"螞蟻部落", url:"softwhy.com" }
上面的程式碼建立了一個object物件,並將其引用儲存在變數obj中。
引用型別的資料儲存在堆中,但是儲存它引用地址的變數儲存在棧記憶體中。
下面看一段程式碼例項:
[JavaScript] 純文字檢視 複製程式碼function done(obj){ obj.webName="螞蟻部落"; obj=new Object(); obj.webName="antzone"; } var obj=new Object(); done(obj); console.log(obj.webName);
上面程式碼的輸出值是"螞蟻部落"。之所以是這個結果是因為,當為done函式傳遞引數的時候,也同樣對棧中的引用做了一份拷貝(僅僅是拷貝了一份引用),指向的還是同一個堆中的物件。所以上面的程式碼分析如下:
1.obj.webName="螞蟻部落",這裡的obj是指向函式外部建立的物件,並給此物件新增一個屬性。
2.obj=new Object(),建立一個全新的物件,物件的引用儲存在變數obj中,這個時候obj指向的就不是外部建立的物件了。
3.obj.webName="antzone",為新物件新增屬性。
4.console.log(obj.webName),這裡的obj儲存的依然是外部建立物件的引用,所以輸出值是"螞蟻部落"。
相關文章
- Python的函式引數傳遞:傳值?引用?Python函式
- 值傳遞和引用傳遞
- php函式引用傳遞引數的方法PHP函式
- JS的方法引數傳遞(按值傳遞)JS
- JavaScript的值傳遞和引用傳遞JavaScript
- Java的值傳遞和引用傳遞Java
- Day30--值傳遞和引用傳遞
- JavaScript函式傳遞引數JavaScript函式
- 函式的引數傳遞函式
- 面試官問:Go 中的引數傳遞是值傳遞還是引用傳遞?面試Go
- js中 函式引數的 傳值/傳引用 問題JS函式
- Go語言引數傳遞是傳值?還是傳引用 ?Go
- Python引數傳遞,既不是傳值也不是傳引用Python
- 引數傳遞方式必須是const引用傳遞
- 函式作為引數傳遞函式
- 函式引數傳遞及返回函式
- 快速搞懂值傳遞與引用傳遞
- Python 中變數賦值傳遞時的引用和複製介紹Python變數賦值
- (求教)關於js函式按值、引用傳遞的問題JS函式
- 關於值傳遞和引用傳遞的解釋
- Java - 是值傳遞還是引用傳遞Java
- Java 從陣列來看值傳遞和引用傳遞Java陣列
- python中函式的引數傳遞Python函式
- go語言引數傳遞到底是傳值還是傳引用Go
- C#程式設計引用型別和值型別 以及引用傳遞和值傳遞C#程式設計型別
- ABAP 方法呼叫的引數傳遞裡,透過引用傳遞的方式,能修改原始引數值嗎?
- Golang中函式傳參存在引用傳遞嗎?Golang函式
- Python語法—函式及引數傳遞Python函式
- golang工作筆記(二)值傳遞與引用傳遞Golang筆記
- 解惑4:java是值傳遞還是引用傳遞Java
- 傳遞函式函式
- 引數傳遞
- 【C語言】函式的概念和函式的呼叫(引數傳遞)C語言函式
- C#|.net core 基礎 - 值傳遞 vs 引用傳遞C#
- JavaScript為事件處理函式傳遞引數JavaScript事件函式
- 深入學習js之——引數按值傳遞#9JS
- html、php和js值的傳遞(使用ajax進行傳遞)HTMLPHPJS
- 這一次,徹底解決Java的值傳遞和引用傳遞Java
- 傳遞指標引數(函式內部給指標賦值)示例指標函式賦值