javascript的變數、傳值、傳址、參數之間關係_jquery
先把收穫晾一下:
1.javascrip變數包含兩種類型的值,一種是引用型別的值,一種是基本型別的值。引用型別包括:Array,Object,Function(可以這麼理解,非基本型別的都是引用型別);5種基本型別包括:undefined,null,string,boolean,number
2.函數的參數的傳遞的機制是複製變數值。
書上說:」把函數外部的值複製給函數內部的參數,就和把值從一個變數複製給另一個變數一樣。基本型別的傳遞如同基本型別變數的複製一樣,而引用型別的則如同引用類型變數的複製一樣。
」當一個變數複製引用型別的值時,同樣也會將儲存在變數物件中的值複製一份放到為新變數指派的空間。不同的是這個值的副本其實是一個指標,而這個指標指向儲存在堆中的一個物件。【注意:複製引用類型的值,才是傳址】
3.參數其實是函數的局部變數。
----------------------------------------------- -----------------------------
基本概念的解釋:傳值:把A的數值傳到B,改變B,A不會跟著變,B存的是跟A一樣的值;
傳址:把A的位址傳到B,改變B,A同時跟著變,B存的只是A的位址(類似電腦的捷徑)。
一個具有值型別(value type)的資料存放在堆疊內的變數中。即在堆疊中分配記憶體空間,直接儲存所包含的值,其值就代表資料本身。值類型的資料具有較快的存取速度。
一個具有引用類型(reference type)的資料並不駐留在堆疊中,而是儲存於堆中。即是在堆中分配記憶體空間,不直接儲存所包含的值,而是指向所要儲存的值,其值代表的是所指向的位址。當存取具有引用類型的資料時,需要到堆疊中檢查變數的內容,該變數引用堆中的一個實際資料。引用類型的資料比值類型的資料具有更大的儲存規模和較低的存取速度。
----------------------------------------------- -----------------------------
下面是三個問題。
【問題1】:
為什麼change(a)函數執行完之後,外面的a沒有受干擾呢?
<script> var a = [1, 2, 3]; function change(a) { console.log(a);//[1,2,3] a = 2; //传值 console.log(a);//2 } change(a); console.log(a); //[1,2,3] </script>
【問題2】:
為什麼change(a)函數執行完之後,外面的a受到干擾呢?
<script> var a = [1, 2, 3]; function change() { a = 2;//传值 } change(); console.log(a); //2 </script>
解析:問題2和問題1的差別在於,問題2並沒有引入參數,所以不涉及複製變數的事情。
【問題3】:
為什麼change(a)函數執行完之後,外面的a受到干擾呢?
<script> var a = [1, 2, 3]; function change(b) { b[0] = 2; } change(a); console.log(a); //[2,2,3] </script>
的確,change函數執行時,參數b是a的複製值。因為a是引用類型,所以在函數內部是b和a按引用來存取的是一個位址的物件。 b[0]=2的出現,並不影響在函數內部b和a所引用的是同一個物件。
【問題4】:
為什麼change(a)函數執行完之後,外面的a沒有受到干擾呢?
var a = [1, 2, 3]; function change(b) { console.log(b);//[1,2,3] b=2; b[0] = 2; } change(a); console.log(a); //[1,2,3]
以上所述就是本文的全部內容了,希望大家能夠喜歡。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

C++參數類型安全檢查透過編譯時檢查、執行時間檢查和靜態斷言確保函數只接受預期類型的值,防止意外行為和程式崩潰:編譯時類型檢查:編譯器檢查類型相容性。運行時類型檢查:使用dynamic_cast檢查類型相容性,不符則拋出異常。靜態斷言:在編譯時對型別條件進行斷言。

i9-12900H是14核心的處理器,使用的架構和工藝都是全新的,線程也很高,整體的工作都是很優秀的,一些參數都有提升特別的全面,是可以給用戶們帶來極佳體驗的。 i9-12900H參數評測大全評測:1、i9-12900H是14核心的處理器,採用了q1架構以及24576kb的製程工藝,提升到了20個執行緒。 2.最大的CPU頻率是1.80!5.00ghz,整體主要取決於工作的負載。 3.相比較價位來說還是特別合適的,性價比很不錯,對於一些需要正常使用的伙伴來說非常的合適。 i9-12900H參數評測大全性能跑分

使用Ajax從PHP方法取得變數是Web開發中常見的場景,透過Ajax可以實作頁面無需刷新即可動態取得資料。在本文中,將介紹如何使用Ajax從PHP方法中取得變量,並提供具體的程式碼範例。首先,我們需要寫一個PHP檔案來處理Ajax請求,並傳回所需的變數。下面是一個簡單的PHP檔案getData.php的範例程式碼:

python憑藉其簡單易讀的語法,廣泛應用於廣泛的領域。掌握Python語法的基礎架構至關重要,既可以提高程式效率,又能深入理解程式碼的運作方式。為此,本文提供了一個全面的心智圖,詳細闡述了Python語法的各個面向。變數和資料類型變數是Python中用於儲存資料的容器。心智圖展示了常見的Python資料類型,包括整數、浮點數、字串、布林值和列表。每個資料類型都有其自身的特性和操作方法。運算符運算符用於對資料類型執行各種操作。心智圖涵蓋了Python中的不同運算子類型,例如算術運算子、比

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

Java中的實例變數是指定義在類別中,而不是方法或建構子中的變數。實例變數也稱為成員變量,每個類別的實例都有自己的一份實例變數副本。實例變數在創建物件的過程中被初始化,以及在物件的生命週期中保存並保持其狀態。實例變數的定義通常放在類別的頂部,可以用任何存取修飾符來聲明,可以是public、private、protected或預設存取修飾符。這取決於我們希望這個變

能打得過GPT-4的開源模型出現了!大模型競技場最新戰報:1040億參數開源模型CommandR+攀升至第6位,與GPT-4-0314打成平手,超過了GPT-4-0613。圖片這也是第一個在大模型競技場上擊敗GPT-4的開放權重模型。大模型競技場,可是大神Karpathy口中唯二信任的測試基準之一。圖片CommandR+來自AI獨角獸Cohere。這家大模型新創公司的共同創辦人兼CEO,正是Transformer最年輕作者AidanGomez(簡稱割麥子)。圖片這份戰報一出,又掀起了一波大模型社

C中const的詳解及程式碼範例在C語言中,const關鍵字用來定義常數,表示該變數的值在程式執行過程中不能被修改。 const關鍵字可以用來修飾變數、函數參數、函數傳回值。本文將對C語言中const關鍵字的使用進行詳細解析,並提供具體的程式碼範例。 const修飾變數當const用來修飾變數時,表示變數為唯讀變量,一旦賦值就無法再修改。例如:constint
