簡體   English   中英

修改在Javascript中通過引用傳遞的變量

[英]Modifying variables that are passed by reference in Javascript

我正在觀看JavaScript演講,輔導老師說,如果我們在函數中傳遞對象的屬性,它將實際上更改實際值,因為我們將通過引用傳遞變量。 這是幻燈片: 在此處輸入圖片說明

但是當我嘗試實踐這一概念時,事實並非如此。 這是我的代碼:

var obj = {val: 5};
function changeVal(x) {
 x = x+5;
 return x;
}
console.log(obj.val) // 5
console.log(changeVal(obj.val)) // 10
console.log(obj.val) // 5

我原本希望obj.val更改為10。 請告訴我這里出了什么問題,如果我錯了,請糾正我。 謝謝

您傳遞的不是對象 ,而是原始類型 因此,當您傳遞objval時,它是一個數字且是原始類型,它將復制val並將副本傳遞給該對象。

如果您這樣通過,它將起作用

var obj = {val: 5};

function changeVal( param ) {
 param.val = param.val  + 5;
 return param.val ;
}
console.log(obj.val) // 5
console.log(changeVal(obj)) // 10
console.log(obj.val) // 10

您實際上並沒有傳遞對象,只是傳遞了property(val)的值。 如果要在changeVal()中傳遞obj ,那么它將實際上更改所傳遞對象的屬性的值。

為此,您需要這樣做:

var obj = {val: 5};
function changeVal(x) 
{
    x = x+5;
    return x;
}
console.log(obj.val); // 5
changeVal(obj); // Need to pass object instead of value of the property's value
console.log(obj.val);  // 10

基本類型(字符串,整數,布爾值等)是不可變的,這意味着如果您更改函數內部的值之一,則被調用方(調用您的函數的作用域)將看不到更改。

function doSomething(a) {
    a = a + 1;
}
var value = 2;
console.log(value); // result: 2
doSomething(value);
console.log(value); // result: 2

引用傳遞僅適用於對象。 像這樣:

function doSomething(obj) {
    obj.attribute = obj.attribute + 1;
}
var myObject = {attribute: 2};
console.log(myObject.attribute); // result: 2
doSomething(myObject);
console.log(myObject.attribute); // result: 3

有關Javascript類型的更多信息: https : //developer.mozilla.org/zh-CN/docs/Web/JavaScript/Data_structures

假設您有一部Iphone。 現在,假設一家制造公司打電話給您,並要求借用您的Iphone以作參考,以便他們可以設計相似的Iphone並將其出售給客戶。 您最初的Iphone仍然存在並且從未消失,但是工廠不時需要使用它作為參考,將您的功能obj僅復制obj的工廠。

//Original data

var obj = {val: 5};

一旦函數返回值,從技術上講,它就變成了一個值

范例:

return 3; is a value of 3

所以

function changeVal(x) {
 x = x+5;
 return x;
}

是x的新值,在這種情況下為x + 5;

x是傳遞給函數的任何內容的副本

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM