[英]Why does the function return the value of the local JSON variable instead the global?
我有一個全局JSON變量,我存儲一些參數,然后每次運行我想要能夠修改它們的函數,但只是在該函數內部。
因此,每次運行該函數時,我都希望在本地變量中獲得全局變量的新副本。
問題是我將全局變量復制到函數中定義的本地變量,並且我對局部變量進行了更改,但是下次運行該函數時,我得到的是全局變量的完整副本。我已經修改過的東西。
謝謝! :)
var test = {"name":"me"};
function bla() {
var t=test;
t.name="you";
t.age=55;
alert(test.name); // Returns "you" that have been set locally instead of "me" that was global value.
}
bla();
在之后通過引用分配對象
var t=test;
變量t
和test
指的是同一個對象。 您需要復制對象以獲取您正在尋找的行為。 由於您正在使用JSON,因此您可以序列化原始對象,然后重新解析為新變量
var t = JSON.parse(JSON.stringify(test));
然后根據需要修改新對象
var t = test
不會創建對象的副本。 它只是用另一個名稱引用同一個對象。 如果你想復制對象,可以考慮使用類似jQuery的$.extend()
函數:
var t = $.extend({}, test);
在該主題上, 數組的等效代碼如下:
var t = test.slice(0);
在你的線上
var t=test;
你沒有復制 test
的內容,你正在創建對相同內容的新引用。 因此,對t內容的任何修改也會修改測試。
要將任意對象復制到另一個變量,請使用類似這樣的原型函數:
Object.prototype.clone = function() {
var newObj = (this instanceof Array) ? [] : {};
for (i in this) {
if (i == 'clone') continue;
if (this[i] && typeof this[i] == "object") {
newObj[i] = this[i].clone();
} else newObj[i] = this[i]
} return newObj;
};
用法:
var bar = foo.clone();
您需要克隆該對象,以便您可以修改克隆並保持原始完整性... 在JavaScript中深度克隆對象的最有效方法是什么?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.