2013-01-25 30 views
4

尝试使用一些不同的方法来生成JavaScript数组时,我偶然发现了一个奇怪的结果。使用mappush的自我引用数组(DEMO):阵列自参考地图 - 非常奇怪的结果

a=[1,1,1,1,1,1,1,1,1,1]; 
a=a.map(a.push,a); 

我得到以下结果(在Chrome):

[13,16,19,22,25,28,31,34,37,40] 

任何人都可以解释,为什么?

+1

“a”的一个更好的选择和逗弄你的'地图'可能是有益的:http://jsfiddle.net/ambiguous/kchXW/1/ –

回答

5

对于a每个元素,push被称为与该元件时,该元素的索引,并且该阵列正被遍历。对于数组中的每个元素,然后我们添加这三个附加元素。这占原始数组中每个元素的长度增加了三个。 push的结果是元素添加后数组的长度,因此得到的数组(从map)是一个数组,其在每次push回调完成后都保存着a数组的长度。

请参阅mappush的文档。

+0

谢谢。在你的回答和@ mu的样品小提琴之间,它全部清除了。我的头脑中并没有完整的图片,代码是干什么的:) – mellamokb