基本类型是按值传递的:
var a = 1;
var b = function(num) {
num += 1;
return num;
}
b(a); //=>2
a //=>1
//当把a作为传递到函数之后,在函数内部进行加1操作之后,num变成了2,但是函数外部的a仍然为1,说明被传递的a被复制了一份给了一个局部变量。
引用类型也是按值传递的:
var person = {}
var setName = function(params) {
params.name = 'leexiaoyong';
}
setName(person);
console.log(person); //=>{name: 'leexiaoyong'};
//引用类型是把person在内存中的地址传递给了局部变量params,当params改变时,指针指向的内存中的对象也相应的发生了变化。所以外部的对象也跟着发生了变化。但是它也是作为值传递的,而不是引用。
证明引用类型是按值传递的例子:
function setName(obj){
obj.name = 'leexiaoyong';
obj = new Object(); //这里创建了一个新对象,其实是在局部变量中创建了一个新对象,这个对象在函数执行完成之后就会被销毁
obj.name = 'suwenli';
}
var person = new Object();
setName('liyuhong');
person //=>{'name': 'leexiaoyong'}