众所周知,JS变量的作用域依据function来划分,且在执行前会对所有声明进行解析,但今天遇到个情况百思不得其解,记录如下:
概述:双层循环,将[0,0],[0,1],[1,0],[1,1]依次插入数组array中,a变量用于存储当前待插入的值。
1、a变量声明于for循环外时,最终获得的数组结果并非期望
<script type="text/javascript">
var array = [];
var a={};
for(var i=0;i<2;i++){
for(var j=0;j<2;j++){
a.x=i;
a.y=j;
array.push(a);
console.log(a);
}
}
console.log(array);
</script>
chrome控制台结果:
最终array数组中存储的值为[1,1],[1,1],[1,1],[1,1],并非预期。
2、a变量声明于for循环内时,最终获得的数组结果并非期望
<script type="text/javascript">
var array = [];
for(var i=0;i<2;i++){
for(var j=0;j<2;j++){
var a={};
a.x=i;
a.y=j;
array.push(a);
console.log(a);
}
}
console.log(array);
</script>
chrome控制台结果:
最终array数组中存储的值为[0,0],[0,1],[1,0],[1,1],虽然预期,但为何与前者不同,尚有待研究。