javascript中函数传递参数到底是按值还是按引用问题(参考红宝书85页~86页)

这个问题在红宝书中已经有了明确的答案:按值。

首先按照书中的例子,针对原始值无需解释,很好理解。主要解决针对引用值参数的传递。

首先明确一点,原始值的存储位置在栈内存,而引用值存储在堆内存,这主要是因为引用值的大小并不固定,为了快速寻找到引用值,每一个引用值都会有一个内存地址(也就是指针,大小固定,占内存小)被存储在栈内存中。

第二点就是在javascript中是不允许直接访问保存在堆内存中的对象的,所以在访问一个对象时,首先得到的是这个对象在堆内存中的地址,然后再按照这个地址去获得这个对象中的值,这就是传说中的按引用访问。而原始类型的值则是可以直接访问到的。

所以引用值对象里面的值其实是一段地址,当你对这个值进行初始化时或者修改时,就相当于给形参换了一个地址,是不会对实参产生影响的

最后可以这样理解,按值传递就是传递栈内存,按引用传递就是传递堆内存。

本文参考javascript传递参数如果是object的话,是按值传递还是按引用传递? - 苏墨橘的回答 - 知乎 https://www.zhihu.com/question/27114726/answer/35481766

 

posted on 2021-03-08 01:26  生命bu息,折腾bu止  阅读(45)  评论(0编辑  收藏  举报

导航