js函数参数传递基本数据类型和引用数据类型的不同
之前提到函数的参数分为形参、实参两种,形参是用来函数定义是设接收调用传入,实参是用来函数调用时传入小括号里面的真实数据。
函数在传递参数时,可以传入两种数据类型,一种是基本数据类型,另一种是引用数据类型,其不同表现形式如下。
1、参数传入基本数据类型是按值传递
var a = 10;
var b = 20;
function test(a,b){
// a,b 形参 将全局下的a,b 复制一份 不会改变全局下的a和b
a = a++;
b = b++;
console.log(a,b); //11 21
}
test(a,b);
console.log(a,b);//10 20
这个例子在调用时传入了a和b,这两个参数的传入可以看做分别为数值10和20传入了函数,在函数体内a和b自加了一,所以函数体内输出11和21,但并未改变a和b变量的值,所以在外面输出10和20。
2、参数传入引用数据类型按地址传递
var obj = {
a:1,
b:2
}
// 按地址传递
function test4(parm){
// parm obj的地址 通过obj的地址找到对应的属性 操作的是属性的本身
parm.a++;
parm.b++;
console.log(parm.a,parm.b);// 2 3
}
test4(obj);
console.log(obj.a,obj.b); // 2 3
这个例子在传入参数时传入的obj是引用数据类型,函数体中parm.a++为obj.a++。其中obj.a相当于是指针,指向obj.a这个地址,改变了obj对象的a的值,所以在函数体中和函数体外都是输出2和3.