nodejs中的变量范围

时间:2015-06-05 21:31:19

标签: javascript node.js variables scope

我刚开始使用nodeJS,我在理解变量范围和引用方面遇到了一些困难。例如,在下面的代码中,即使切片是变量b,变量a也会被改变/被覆盖。我的问题是,如何将变量a复制到变量b而不引用它/覆盖变量a。

var a = ['a', 'b', 'c', 'd'];
var b = a;
b.splice(3,1);

console.log(a)    //will display ['a', 'b', 'c'] instead of ['a', 'b', 'c', 'd']

4 个答案:

答案 0 :(得分:1)

而不是使用像Amit建议的库,这可以在本地完成,而无需安装庞大的库......

使用没有参数的.slice()

var a = ['a', 'b', 'c', 'd'];
var b = a.slice();
b.splice(3,1);

console.log(a);

当您设置b = a时,您不会创建新数组,而只是告诉b保留对a的引用。因此ab实际上是在内存中引用相同的位置。 .slice通过返回一个完整的新数组来工作。

答案 1 :(得分:0)

您可以使用slice

b = a.slice(0);

或者您可以使用concat

b = [] .slice(0);

对象

还有对象的extend方法。

和下划线库中的clone方法

答案 2 :(得分:0)

您正在寻找的功能称为深度克隆或深层复制。

有几种方法可以执行此操作,例如您可以使用lodash

$('.PNSM2').something
$('.PNSM3').something

答案 3 :(得分:0)

感谢您的帮助,但我找到了问题的答案。如果有人来到这篇文章并遇到同样的问题,你可以在这里找到解决方案Nodejs: how to clone a object