var X = 3,Y = 3,n = 1,result=[],arr=[];
while(Y--){
while(X--){
result[X] = n++;
}
arr[Y] = result;
console.log('内循环跳出:'+ arr[Y]);
console.log('跳出后:'+ arr);
X = 3;
}
console.log(arr);
输出的结果是
内循环跳出:3,2,1
跳出后:,,3,2,1
内循环跳出:6,5,4
跳出后:,6,5,4,6,5,4
内循环跳出:9,8,7
跳出后:9,8,7,9,8,7,9,8,7
[ [ 9, 8, 7 ], [ 9, 8, 7 ], [ 9, 8, 7 ] ]
在跳出后,重置
result = []
能等到预期的结果,这是为什么呢?
你得不到预期的结果:
[[9, 8, 7], [6, 5, 4], [3, 2, 1]]
原因如下:
result作为一个变量其指向一个数组对象;
arr[Y] = result;语义为将arr数组第(Y+1)个位置指向result变量指向的对象;也就是result和arr[Y]指向了同一个对象,在result没有重新赋值的情况下,arr的各个位置的元素指向和result的指向保持一致
在你result=[]重新赋值后,result变量指向了另一个对象,arr原来指向的对象没有发生变化
和下面的代码同理