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儲存的依然是外部建立物件的引用,所以輸出值是"螞蟻部落"。
相關文章
- js中函式引數值傳遞和引用傳遞JS函式
- Python的函式引數傳遞:傳值?引用?Python函式
- setTimeout()呼叫的函式傳遞引數簡單介紹函式
- 值傳遞和引用傳遞
- php函式引用傳遞引數的方法PHP函式
- JS的方法引數傳遞(按值傳遞)JS
- JavaScript的值傳遞和引用傳遞JavaScript
- Java引數傳遞是傳值還是傳引用?Java
- 值傳遞與引用傳遞
- 面試官問:Go 中的引數傳遞是值傳遞還是引用傳遞?面試Go
- Java中的值傳遞和引用傳遞Java
- JavaScript函式傳遞引數JavaScript函式
- 函式的引數傳遞函式
- JavaScript函式引數傳遞JavaScript函式
- JS是按值傳遞還是按引用傳遞?JS
- Go語言引數傳遞是傳值?還是傳引用 ?Go
- Go語言引數傳遞是傳值還是傳引用Go
- 快速搞懂值傳遞與引用傳遞
- js中 函式引數的 傳值/傳引用 問題JS函式
- 函式作為引數傳遞函式
- 函式引數傳遞及返回函式
- 關於值傳遞和引用傳遞的解釋
- react 外部函式的引用以及onClick傳遞引數React函式
- GO中的函式設計時候,引數傳遞選擇傳遞值還是傳遞指標?Go函式指標
- Python引數傳遞,既不是傳值也不是傳引用Python
- 引數傳遞方式必須是const引用傳遞
- Java - 是值傳遞還是引用傳遞Java
- (求教)關於js函式按值、引用傳遞的問題JS函式
- Java 從陣列來看值傳遞和引用傳遞Java陣列
- Python 中變數賦值傳遞時的引用和複製介紹Python變數賦值
- python函式之引數傳遞Python函式
- go語言引數傳遞到底是傳值還是傳引用Go
- ajax傳遞的引數值包含單引號
- C#程式設計引用型別和值型別 以及引用傳遞和值傳遞C#程式設計型別
- ABAP 方法呼叫的引數傳遞裡,透過引用傳遞的方式,能修改原始引數值嗎?
- js如何獲取url所傳遞的引數和引數值JS
- php函式的傳值如果需要引用傳遞注意的細節PHP函式
- Golang中函式傳參存在引用傳遞嗎?Golang函式