JavaScript 是按引用傳遞還是按值傳遞的語言?


JavaScript 為我們提供了函式,函式是一組預定義的指令或語句,只有在我們呼叫包含此程式碼的函式時才會執行。函式接受一個或多個引數作為輸入並輸出。您可以傳遞值或引用作為輸入引數。

所有函式引數在 JavaScript 中始終都是按值傳遞的。這意味著 JavaScript 將變數值的副本插入函式引數中。

對函式內部引數所做的任何修改都不會影響函式外部傳遞的變數。或者換句話說,對引數所做的更改不會影響函式外部的行為。

當變數按引用傳遞到函式時,在函式外部進行的任何修改都會反映在您傳遞的變數中。JavaScript 無法支援這一點。

按值傳遞

按值傳遞是指透過簡單地提供變數的值作為引數來呼叫函式的方法。因此,在函式內部進行的任何修改都不會影響初始值。

按值傳遞時,每個引數的引數都會建立自己的副本。因此,在函式內進行的所有修改都針對克隆的值而不是原始值進行。

示例 1

在這個例子中,讓我們瞭解一下,透過直接將變數的值作為引數傳遞,呼叫一個接受按值傳遞呼叫的函式。

<!DOCTYPE html> <html> <title>Is JavaScript a pass-by-reference or pass-by-value language - TutorialsPoint</title> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body style="text-align:center"> <script> function passValue(y, z) { let subst; subst = z; z = y; y = subst; document.write(`This code is in the function -> y = ${y} z = ${z}` +'<br>'); } let y = 6; let z = 12; document.write(`This code before calling the Function -> y = ${y} z = ${z}` +'<br>'); passValue(y, z); document.write(`This code after calling the Function -> y =${y} z = ${z}`); </script> </body> </html>

按引用傳遞

按引用傳遞透過立即將變數的引用或地址作為引數傳遞來呼叫函式。因此,在函式內部更改值也會修改初始值。JavaScript 中使用了陣列和物件的按引用傳遞屬性。

按引用傳遞意味著作為引數傳遞的引數與原始值相關聯,而不是建立自己的副本,這意味著在函式內部進行的修改會影響原始值。

示例 2

讓我們看一個示例,以更好地瞭解如何呼叫接受變數的地址或引用的函式。

<!DOCTYPE html> <html> <title>Is JavaScript a pass-by-reference or pass-by-value language - TutorialsPoint</title> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body style="text-align:center"> <script> function passReference(object) { let subst = object.y; object.y = object.z; object.z = subst; document.write(`This code is in the Function -> y = ${object.y} z = ${object.z}` +'<br>'); } let object = { y: 15, z: 30 } document.write(`This code before calling the Function -> y = ${object.y} z = ${object.z}` +'<br>'); passReference(object) document.write(`This code after calling the Function -> y = ${object.y} z = ${object.z}`); </script> </body> </html>

示例 3

讓我們使用此示例來了解如何在函式中更新物件引用。

在使用按引用傳遞時,我們正在更改原始值。當我們傳遞一個物件作為引數並在函式上下文中更改其引用時,物件值不受影響。但是,在內部更改物件將對其產生影響。

function passReference(object) { object = { x: 15, y: 30, z: "Tutorialspoint" } console.log(`This code is in the Function -> object `); console.log(object); } let object = { x: 15, y: 30 } console.log(`object reference is getting update -> `) console.log(`This code before calling the Function -> object`); console.log(object); passReference(object) console.log(`This code after calling the Function -> object`); console.log(object);

以上程式碼將給出以下輸出:(點選 F12,您將在控制檯選項卡中看到結果)

簡而言之

在本文中,我們首先了解了按值傳遞和按引用傳遞是什麼,然後使用示例解釋了這兩個概念。

可以按值或按引用將值傳遞到函式。按值傳遞用於基本資料型別,例如字串、數字和布林值,並且每次將變數傳遞到函式時,都會建立該變數的副本並在按值傳遞過程中進行修改。按引用傳遞用於物件資料型別,例如函式、陣列和普通物件;但是,由於按引用傳遞不會建立原始值的副本,因此原始值會被更新。

更新於: 2022-08-23

444 次檢視

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.