javascript - 卡住javascript中的变量值

标签 javascript arrays closures

我在 javascript 中的特定时间保存变量值时遇到问题。在基本层面上,在下面的代码中,我希望变量“b”保持分配给它的值

var a = [];
var b = '';
var c = 'value';

a.push(c);
b = a;
console.log(b); // b = ["value"]
a.push(c);
console.log(b); // b = ["value", "value"], but i want it to be just ["value"]

我见过使用闭包解决类似问题的各种解决方案,例如这个问题:Intentionally "freezing" a javascript variable using a self-executing function .我在这个 Jsbin 中尝试过该解决方案但未成功:http://jsbin.com/zusara/1/edit?js,console .

如有任何帮助,我们将不胜感激。 谢谢,最好!

最佳答案

将数组分配给变量不会创建副本。因此,ab 变量都指向同一个数组,通过任一变量所做的任何更改都会显示在另一个变量中。

如果你想在 Javascript 中复制一个数组,那么你必须明确地制作一个数组的副本。

var a = [];
var c = 'value';
a.push(c);
// make shallow copy of a into b
var b = a.slice(0);

b 现在包含一个完全独立的数组,a 的修改不会影响 b

注意:这是浅拷贝,不是深拷贝,是数组的解决方案。浅拷贝不会复制数组中的对象或这些对象中的对象。进行深层复制需要更多代码,但通常不需要,而且对于您提供的示例,您的情况似乎也不需要。


如果你想要一个深拷贝并且也想包含对象,而不仅仅是数组(我提供了一个数组的浅拷贝的简单解决方案),你可以看到这个引用,这里有很多选择和争论:

What is the most efficient way to deep clone an object in JavaScript?

关于javascript - 卡住javascript中的变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26851874/

相关文章:

javascript - 从另一个文件访问 Ext Designer JsonStore

javascript - 取消选中数组中的复选框后如何删除元素?

php - 将闭包作为新方法绑定(bind)到类

php - Codeigniter:类别和子类别

arrays - 在 Delphi 中定义记录 - (记录为类型与记录为变量)- 差异、缺点和优点..?

c# - 为什么有些闭包比其他的闭包 'Friendlier'?

c - 如何创建一个返回另一个函数的函数,并在 C 中隐式包含给定的参数?

javascript - 如何从 Form Extjs 6.0.2 获取 DisplayField 的值?

javascript - 多选复选框不返回 Extjs 4.2 网格中的值

php - 如何使用 PHP 或 JS/HTML 双重发布到 URL