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对象就会被更改。相反,情况是传入的项按值传递,但是通过值传递的项本身是一个引用,称为共享调用,意思是说更改参数本身不会实际影响传入的参数项,但是如果更改参数的内部结构,例如更改对象的属性,则修改会向上传递,即影响参数的内部结构。
推荐阅读
- 如何使用JavaScript或jQuery重定向到另一个页面(有哪些方式?)
- 在JavaScript中如何格式化日期(有几种方式?哪种提供完全自定义格式化?)
- JavaScript中如何有效地深拷贝一个对象()
- 在JavaScript中使用哪个等号(== vs ===)进行比较操作好()
- var functionName=function(){}和functionName=function(){}有什么区别()
- JavaScript正则表达式高级语法原理分析和应用实例
- 不理解JS的模块化,JavaScript的模块化是如何演变或发展来的(如何实现?)
- JavaScript有异常和错误处理吗(如何进行异常处理?可以自定义吗?)
- JavaScript中函数调用分别都有哪些方式(对应的使用场景是什么?)