JavaScript是一种引用传递还是值传递的语言(如何区分?)

JavaScript是一种引用传递还是值传递的语言?如何区分?基本类型(数值、字符串、布尔类型等)是通过值传递的,但是对象是未知的,好像既可以通过值传递(普通类型也有对象的特征),也可以通过引用传递,如何区分?
首先,基本类型使用对象的方法时,JS引擎只是将基本类型临时转换成对应的包装数据类型,这时就可以使用对象的相关方法了,但是使用完变量随即释放该包装类型,所以基本类型还是基本类型,基本类型是通过值传递的,看下面的例子:

function change(obj, number, obj1){ obj.name = "string"; number = 100; obj1 = {age : 12}; }var obj = {name : "text"}; var obj1 = {age : 78}; var number = 90; change(obj, number, obj1); console.log(obj.name); // 输出string,为引用传递 console.log(obj1.age); // 输出78,该对象表现为值传递 console.log(number); // 输出90,为值传递

【JavaScript是一种引用传递还是值传递的语言(如何区分?)】如果obj是值传递,那么obj.name就不会被更改,如果obj1是引用传递,那么obj1对象就会被更改。相反,情况是传入的项按值传递,但是通过值传递的项本身是一个引用,称为共享调用,意思是说更改参数本身不会实际影响传入的参数项,但是如果更改参数的内部结构,例如更改对象的属性,则修改会向上传递,即影响参数的内部结构。

    推荐阅读