个性化阅读
专注于IT技术分析

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,为值传递

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

赞(0)
未经允许不得转载:srcmini » JavaScript是一种引用传递还是值传递的语言?如何区分?

评论 抢沙发

评论前必须登录!