轉載于知乎
var a = [1,2,3];
var b = a;
a = [4,5,6];
alert(b); //[1,2,3]
面試時被問到這樣一個問題,竟然從來沒試過... 當時直接的了解,數組是引用類型,應該是傳遞的是引用,so b也是[4,5,6],于是錯了。js數組傳遞是跟基本類型一樣建立副本嗎?
我又做了如下測試:
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引用造成影響,改變數組對象可以。
作者:Intopass
連結:https://www.zhihu.com/question/26042362/answer/31903017
來源:知乎
著作權歸作者所有,轉載請聯系作者獲得授權。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBHL0FWby9mZvwVZnFWbp1zczV2YvJHctM3cv1Ce-cnW1JkbMh3YE9ENBpWT10keOhHMp5keFpWT5llaNhXSE1UeJRVTyUERNlHMT1kMnpXT0EEVNZXSU1kMFRUT5hzUNJzZ61ENBRVT2NmMiNnSywEd5ITW110MaZHetlVdO1GTxUERNlXTYplbGdlYwlTeMZTTINGMShUYvwlbj5yZtlmbkN3YuQnclZnbvN2Ztl2Lc9CX6MHc0RHaiojIsJye.jpg)