先来看例1
var a =1;
function myFunc(b){
b = 2;
console.log(b);
}
myFunc(a);
console.log(a);
会依次打印出
2
1
再看例2
var a =1;
function myFunc(a){
a = 2;
console.log(a);
}
myFunc(a);
console.log(a);
依然会打印出
2
1
再看例3
var o ={a:1}
function myFunc(o){
o.a=2;
console.log(o.a);
}
myFunc(o);
console.log(o.a);
会打印出
2
2
上面的例子说明,在js中调用一个函数时,其实是声明了一个新的变量,并让其等于传递的参数。在第三个例子中,由于o是一个object(引用类型),所以在函数中修改o.a时,外面的o.a也被修改了。函数中的o并不是外面的o,而是o的一个引用。例3也就等价于下面的操作
var o = {a:1};
var o2 = o;
o2.a=2;
console.log(o2.a);
console.log(o.a);
结果也是
2
2