js中函式引數值傳遞和引用傳遞
一.函式傳遞值型別:
程式碼例項如下:
[JavaScript] 純文字檢視 複製程式碼function addNum(num){ num+=10; return num; } var num=10; var result=addNum(num); console.log(num); console.log(result);
以上程式碼的彈出值分別為:10和20,下面進行一下分析:
宣告變數num並複製為10,這個是num是一個值型別,當為函式傳遞引數的時候,是將此值複製一份傳遞給函式,所以在函式執行之後,num本身的值並沒有被改變,函式中被改變的值僅僅是一個副本而已。
二.函式傳遞引用型別:
[JavaScript] 純文字檢視 複製程式碼function setName(obj){ obj.name="青島新銳"; } var web=new Object(); web.name="螞蟻部落"; setName(web); console.log(web.name);
以上程式碼的彈出值是:“青島新銳”,下面進行一下分析:
宣告一個物件web,它是一個引用型別,當為函式傳遞引數的時候,是傳遞的web物件的引用,也就是此物件的記憶體地址,所以在函式中修改屬性的物件就是函式外面建立的物件本身。
三.加深理解:
[JavaScript] 純文字檢視 複製程式碼function setName(obj){ obj.name="青島新銳"; obj=new Object(); obj.name="螞蟻部落"; } var web=new Object(); setName(web); console.log(web.name);
以上程式碼的彈出值是:青島新銳,很多人可能會以為將會彈出“螞蟻部落”,下面進行一下簡單的分析:
在函式外面建立一個物件,並將物件的引用賦值給變數web,web中儲存的是物件在記憶體中的儲存地址,當為函式傳遞引數的,就是傳遞的在函式外面建立的物件的地址。在函式中,為外面建立的物件建立一個自定義屬性name並賦值為“青島新銳”,然後又建立一個新的物件,並將新物件的地址賦值給obj,這個時候obj指向的並不是函式外面建立的物件,所以外面物件name屬性不會被改變。
相關文章
- Python的函式引數傳遞:傳值?引用?Python函式
- 值傳遞和引用傳遞
- php函式引用傳遞引數的方法PHP函式
- JS的方法引數傳遞(按值傳遞)JS
- js中 函式引數的 傳值/傳引用 問題JS函式
- 面試官問:Go 中的引數傳遞是值傳遞還是引用傳遞?面試Go
- JavaScript的值傳遞和引用傳遞JavaScript
- Java的值傳遞和引用傳遞Java
- Day30--值傳遞和引用傳遞
- JavaScript函式傳遞引數JavaScript函式
- 函式的引數傳遞函式
- python中函式的引數傳遞Python函式
- Go語言引數傳遞是傳值?還是傳引用 ?Go
- Python引數傳遞,既不是傳值也不是傳引用Python
- 引數傳遞方式必須是const引用傳遞
- Golang中函式傳參存在引用傳遞嗎?Golang函式
- 函式作為引數傳遞函式
- 函式引數傳遞及返回函式
- 快速搞懂值傳遞與引用傳遞
- (求教)關於js函式按值、引用傳遞的問題JS函式
- 關於值傳遞和引用傳遞的解釋
- Java - 是值傳遞還是引用傳遞Java
- Java 從陣列來看值傳遞和引用傳遞Java陣列
- go語言引數傳遞到底是傳值還是傳引用Go
- C#程式設計引用型別和值型別 以及引用傳遞和值傳遞C#程式設計型別
- ABAP 方法呼叫的引數傳遞裡,透過引用傳遞的方式,能修改原始引數值嗎?
- Python語法—函式及引數傳遞Python函式
- golang工作筆記(二)值傳遞與引用傳遞Golang筆記
- 解惑4:java是值傳遞還是引用傳遞Java
- 函式中引數傳值函式
- 如何計算PHP函式中傳遞的引數數量PHP函式
- 傳遞函式函式
- 引數傳遞
- 【C語言】函式的概念和函式的呼叫(引數傳遞)C語言函式
- C#|.net core 基礎 - 值傳遞 vs 引用傳遞C#
- JavaScript為事件處理函式傳遞引數JavaScript事件函式
- 深入學習js之——引數按值傳遞#9JS
- html、php和js值的傳遞(使用ajax進行傳遞)HTMLPHPJS
- 這一次,徹底解決Java的值傳遞和引用傳遞Java