学习了JavaScript 是传值调用还是传引用调用?@nodejh/nodejh.github.io的文章,了解了函数参数的传值调用方式,基本类型是传值调用,引用类型是传共享调用
函数参数的传递方式
一般来说有三种参数传递方式:
(1)传值调用
传值调用时,来传递给函数参数时函数被调用时所传实参的拷贝,其值会被绑定到函数对应的变量上(通常是把值复制到新内存区域)。
(2)传引用调用
传引用调用是,传递给函数的是它的实际参数的隐式引用而不是实参的拷贝。函数能够修改这些参数,而且改变时对调用者可见的。
(3)传共享调用
传共享调用和传引用调用的不同之处是,这种方式传递给函数参数的是对象引用的拷贝,即对象变量指针的拷贝
JavaScript中采用的是哪种传值调用方式呢?先给出结论:
基本类型是传值调用,引用类型是传共享调用
这与《JavaScript高级程序设计》中的结论是JavaScript参数传递是不矛盾的,因为传值调用本质上传递的是变量的值的拷贝,而传共享调用本质上是传递对象的指针的拷贝,指针也是变量的值,所以传共享调用也可以说是传值调用
具体如何理解呢,先看一个例子