简单来说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样。
然而并不是这样分,应分为两种:
- 值传递
- 引用传递
① 在向参数传递基本类型的值时,被传递的值会被赋值给另一个变量。如下面代码:
function fn(num) {
num += 10;
return num;
}
var a = 20;
var b = fn(a); //按值传递 num = b;
console.log(a); // 20, 没变化
console.log(b); // 30
② 在向参数传递引用类型时,引用传递的是指针的值,obj=new Object()改写了自己的指向,并不会影响到 b 的指向,这种方式就是按引用传递。如下面代码:
function fn(obj) {
obj.name = "old";
obj = new Object(); //改变obj的指向,此时obj指向一个新的内存地址,不再和 b 指向同一个
obj.name = "xin";
}
var b = new Object();
fn(b);
console.log(b.name); //"old"