js 数组赋值问题 ：值传递还是引用？
### 题目描述
```
var a = [1,2,3];
var b = a;
a = [4,5,6];
alert(b);  //[1,2,3]


var a = [1,2,3];
var b = a;
a.pop();
alert(b);  //[1,2]
//第一个我懂 第二个我不懂
```
### 题目来源
知乎
```
这是一个人回答的
a = [4,5,6];//改变的是a引用本身，没有改变数组对象
a.pop();//改变的是数组对象，a引用没有改变。
b = a;//该操作后，b直接指向数组对象，不是b指向a，a再指向数组。
//所以改变a引用并不会对b引用造成影响，改变数组对象可以

```
但是我觉得说不通啊 我觉得应该是 这个执行顺序啊  但是从结果看 我是错的~~
```
a = [4,5,6];//改变的是a引用本身，没有改变数组对象
b = a; // 这边还是指向引用
a.pop();

```
早上在知乎翻到的 看了他们的答案还是有点蒙蔽 有点蒙蔽  大佬能不能简明扼要的解答下  
我有点菜 望不吝赐教
[1,2,3]是一幢楼，
[4,5,6]也是一幢楼，
a和b是两块门牌号铁皮。
```
var a = [1,2,3];  //把a牌号挂到 123楼门口
var b = a;        //把b牌号挂到 a牌号所在的楼门口，即123楼
a = [4,5,6];      //把a牌号摘下来，挂到了456楼的门口
alert(b);  //[1,2,3]  //此时b牌号依旧挂在123楼门口，b即代表着123楼


var a = [1,2,3];    //把a牌号挂到 123楼门口
var b = a;          //把b牌号挂到 a牌号所在的楼门口，即123楼
a.pop();            //把a牌号所在的楼拆掉顶层,此时a牌号仍旧挂在123楼门口，那就拆3层
alert(b);  //[1,2]  //b牌号仍旧挂在 原123楼门口，但此时只剩12两层
```