答案 0 :(得分:1)
将局部变量设置为值并不一定意味着将传播到引用变量的所有位置。举个例子:
var foo = (function() {
var bar = [1, 2, 3, 4, 5];
return {
get: function() {
return bar;
},
show: function() {
$("html").append("<div>" + bar.length + "</div>");
}
};
})();
var a = foo.get();
foo.show();
a = foo.get();
a = a.concat([6, 7]);
foo.show();
a = foo.get();
a.push([6, 7]);
foo.show();
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
&#13;
对show
的第二次调用打印&#34; 5&#34;,因为bar
未修改a = a.concat
。由于a
和bar
是引用,因此当您将a
设置为bar.concat
的返回值时,会生成bar
的副本并将其分配给{{1} }}。位置a
引用不会更改,数组的内容也不会更改为bar
。
当重新分配一个引用时,它不会传播到引用bar
的每个地方(如果有的话,复制将几乎不可能)。
在这种情况下,了解哪些数组方法最有用,您可能bar
或push
。它取决于确切的用途(在特定索引处追加或插入,一次删除现有元素,或从另一个数组中删除)。
Splice可以在数组中做一些有趣的事情,并且具有返回被删除元素的有趣属性。它可以插入和替换元素,具体取决于提供的参数。
Push就是这样做,将元素附加到数组的末尾,就好像它是一个列表一样。如果您有另一个数组,splice
是一种将它们组合起来的便捷方式。
如果您有权访问Underscore.js,那么其中的许多收集方法都很有用。它们通常会返回一个新数组,但提供it.push.apply(other)
和flatten
等功能。