JavaScript的函数传参到底是值传递还是引用(地址值)传递

var myval =900;
function abc(val) {

val = 90;

}
abc(myval);
alert(myval); //900
这里输出900 相当于就是值传递了吧

var myarr=[456,90,900];
function abc2(arr) {

arr[0]=35;

}
abc2(myarr);
for (var i = 0; i < myarr.length; i++) {

document.writeln(myarr[i]);

}
// 35 90 900
但是这里看起来就是引用(地址值)传递了

阅读 3.6k
6 个回答

JS函数参数传递类型有两种:
一种是值传递,适用于基本数据类型(string, number, boolean)
一种是引用传递,适用于引用类型(array, function, object)

拿第一个为例,你调用函数传入参数900但是函数有函数域外部是访问不到的, 相当于封装到了函数内部 ,console.log()在函数体外部。访问的是全局变量myval 所以你打印出来的结果是900

基本类型按值传递
引用类型只是复制了地址指针,指向的内存是一样的

如果是对象传参,就是引用传参,会改变值,如果是标量传参,就是值传参,不会改变值,数组是对象,所以相当是引用传参

值传递,如果是对象,传递的是对象的引用值

看你传入函数的参数类型,在js中数据类型分为两种,一种是原始数据类型,另外一种是引用类型
当你传参为原始数据类型时,这个时候是值传递,当你传参为引用数据类型时,这个时候是值传递

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题