JS在传递参数都是按值传递的,作为初学者举几个例子再次加深印象
数值类型传递
function addnum(num){
num+=10;
return num;
}
var res=10;
addnum(res);
console.log(res);
打印值为 10;
var num1=10;
var num2=num1;
var num1=20;
console.log(num2);
打印值为10 这些想必大家都没有问题。看如下代码块,
var obj1=new Object()
obj1.name="wo";
var obj2=obj1;
obj2.name="ta";
console.log(obj1.name);
当作为对象传递 的时候,这个时候打印值为ta,这个时候会误以为它是以引用传递的,其实不然,obj2复制ob1后,又给name属性赋值,因为他们的赋值的属性相同所以访问的内存也一样,所以修改的是同一个对象。
function changename(obj){
obj.name="wo";
var obj=new Object();
obj.name="ta";
}
var ren=new Object();
changename(ren);
console.log(ren.name);
如上代码和之前的有所不同在changename里面,第一行重新定义了对象,2.3行定义了不同值的name属性,执行后打印出值为 wo,如果是按引用传递的name打印应该是为 ta,所以即使在函数内部修改了值,原来的引用尚未改变,其实在函数内部重写obj的时候,这个变量的就是一个局部对象了,在changename执行完毕后会被摧毁。