有人可以在下面的代碼中解釋我,爲什麼當我做o = {}時,對象沒有被重置?Javascript:Pass By Reference
var funky = function (o) {
o.z = null;
o.a = "aaa";
o = {};
};
var x = { z: "zzz"};
funky(x);
console.log(x);
有人可以在下面的代碼中解釋我,爲什麼當我做o = {}時,對象沒有被重置?Javascript:Pass By Reference
var funky = function (o) {
o.z = null;
o.a = "aaa";
o = {};
};
var x = { z: "zzz"};
funky(x);
console.log(x);
因爲JavaScript不按引用傳遞。它通過值傳遞參考。
區別是微妙的,但重要的。它的要點是,對象變量的值不是一個對象;它是一個參考對象。傳遞變量傳遞該引用的副本。有了它,你可以隨意修改對象的內容,但是你無法用調用者可以看到的方式替換整個其他對象。
Is there沒有辦法通過參考傳遞? – 2013-03-14 15:08:16
您可以通過傳入對象並修改對象來「模擬」引用傳遞。但是,您不能重新分配對象。把它看作傳入一個可變對象的指針。您可以通過指針的成員修改對象,但不能重新指定指針,並期望外部函數採用修改後的指針。 – 2013-03-14 15:09:28
o
只是它當前指向的別名,它不是實例(按值傳遞)。
如果你想效仿 「按引用傳遞」,你可以做到這一點:
var x = { ... };
var container = { x: x };
funky(container);
現在你可以在funky()
重置:
container.x = {};
仍然我不知道我明白....你能解釋一下嗎?謝謝 – 2013-03-17 07:53:02
你不能在你的函數中修改用'var x = ...'創建的對象。 'o = {};'不修改現有的對象,它會創建一個新的對象。 'o'現在指向新對象,但無法更改'x'。所以你需要把'x'放入另一個對象中。 – 2013-03-21 13:53:51
嘗試設置O操作'null'代替。 – Paul 2013-03-14 15:09:39
可能重複[在Javascript中通過引用傳遞變量](http://stackoverflow.com/questions/7744611/pass-variables-by-reference-in-javascript) – 2013-03-14 15:10:11
將o設置爲null不會改變任何東西 – 2013-03-14 15:18:56