参数按值传递
2018-03-23 本文已影响0人
怪物猎人
参考
JavaScript深入之参数按值传递
JavaScript高级程序设计(第3版)
基本类型
举个例子:
var num1= 5;
function foo(num2) {
num2 = 2;
console.log(num2); //2
}
foo(num1);
console.log(num1) // 1
在此,num1 中保存的值是5。当传递 num1 到函数 foo 中时,num2 中也保存了值5,但 num2 中的5与 num1 中的5是完全独立的,该值只是 num1 中5的一个副本。此后,这两个变量可以参与任何操作而不会互相影响。
传递过程如下图所示:

引用类型
举个例子:
var obj1 = {
value: 1
};
function foo(obj2) {
obj2.value = 2;
console.log(obj2.value); //2
}
foo(obj1);
console.log(obj1.value) // 2
在此,首先 obj1 保存了一个对象的实例,然后,这个值被复制到了 obj2 中,换句话说 obj1 和 obj2 都指向同一个对象。
传递过程如下图所示:
