看啥推荐读物
专栏名称: SegmentFault思否
SegmentFault (www.sf.gg)开发者社区,是中国年轻开发者喜爱的极客社区,我们为开发者提供最纯粹的技术交流和分享平台。
今天看啥  ›  专栏  ›  SegmentFault思否

通过内存分析来解释 JavaScript 数组赋值问题

SegmentFault思否  · 公众号  · 程序员  · 2020-03-30 11:50
本文转载于 SegmentFault 社区社区专栏:夕阳下的奔跑作者:G_Koala_C 起因是在逛 sf 的时候看到这样一个问题: javascript 为什么 arr 数组没有被赋值?var arr=[1,2];var arr0=[{a:1,b:2}];function fun(data){ data = arr0}fun(arr);console.log(arr) //[1,2]问题:调用函数后 arr 的值不是应该改变的吗?为什么 arr 的值没有改变?提问者:smile_梵音  一看这个问题,似懂非懂。后经讨论和高人指定,画了下内存图,感觉瞬间清晰了。和大家分享下,欢迎指正!初始的内存分布,形参变量存在栈中,对象存在堆内。如图,栈中有 arr,arr0,还有 fun 的形参 data 三个变量,分别指向了堆中的两个数组对象的首地址。  执行 fun(arr);,将 arr 数组对象的首地址作为实参传入 fun 中,此时,data 的指向发生变 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照