簡體   English   中英

為什么函數返回本地JSON變量的值而不是全局?

[英]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;

變量ttest指的是同一個對象。 您需要復制對象以獲取您正在尋找的行為。 由於您正在使用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();

http://my.opera.com/GreyWyvern/blog/show.dml/1725165

您需要克隆該對象,以便您可以修改克隆並保持原始完整性... 在JavaScript中深度克隆對象的最有效方法是什么?

暫無
暫無

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

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