2011-12-09 235 views
3

我對通過引用傳遞JavaScript變量有點困惑。通過引用傳遞JavaScript變量

看看下面的代碼:

var p = [1,2]; 
var pRef = p; 
p.push(3); 
pRef === p; // true 

然後考慮下面的代碼:

var s = "ab"; 
var sRef = s; 
s = s + "c"; 
sRef === s; // false 

什麼是關於通過引用傳遞JavaScript的變量的伎倆?

它存在一種方法來創建一個字符串的引用嗎?

回答

4

操縱字符串會導致創建字符串對象的新實例。在數組中推入項目不會創建數組的新實例,而只會向其中添加項目。

+2

「操作字符串會導致創建字符串對象的新實例。」並將新實例分配給該變量使其指向該新對象。 – Thilo

0

字符串在JavaScript中是不可變的。

2

這兩個例子沒有做同樣的事情。在第一種情況下,你永遠不會重新分配p,你只需調用它的方法來修改數組中的值。在第二種情況下,您在設置sRef之後重新分配s,以使它們不再相同。

0

p不代表[1,2],而是來自[1,2]的指針保存在內存中。 所以如果你改變p或者pRef,這個數組保存在內存中的地方不會只改變它的值。

+0

雖然也可以對String變量進行說明。 – Thilo

0

對象通過引用傳遞。如果你想有一個函數操作引用一個字符串,你可以通過這樣所有的對象都是通過引用傳遞對象

function manipulate(obj) { 
    obj.bar += ' changed'; 
} 

var foo = { 
    bar: 'that'; 
}; 

manipulate(foo); 

//foo.bar is now 'that changed' 

該字符串。數組是js中的對象。