js中所有函数的参数(按值和按引用)都是按值传递的,怎么理解?

我觉着我可能对这块有点误解,所以单独开个博说下自己的理解,当然是研究后的正解了。

1,参数传递是基本类型,看个例子:

function addTen(num){
    num += 10;
    return num;
}

var count = 20;
var result = addTen(count);
console.log(count,result); //20 30

感觉这个都没啥好说的,基本类型传入函数后,函数内部参数生成一个参数副本,按值传入没毛病。

2,引用类型(一个对象)当作参数传入函数后呢?

function setName(obj){
    obj.name = 'miya';
}
var person = new Object();
setName(person);
console.log(person.name) //miya

在这个例子里面,obj和person指向的是同一个对象,当obj上面添加name属性时候,外面的person也有所反应。那这就说明:参数是按引用传递进来的?不是的呦,它传递进来的数据其实是person的内存地址,所以说是按值传递的。因为修改了同一个内存,所以外面的person也变了。不信看下面的例子:

function setName(obj){
    obj.name = 'miya';
    obj = new Object();
    obj.name = 'jone'
}
var person = new Object();
setName(person);
console.log(person.name); //miya

唯一区别是在函数内部给obj对象重新赋值了一个对象,首先person的内存地址传递进来后,添加name属性,而后obj重新指向另外一个新对象,给新对象添加属性。所以现在obj引用的是另外一个局部对象了。person的name值仍然是miya。

所以这里的“按值传递”的,引用类型传递进来传递的是它的内存数据(值)。

可以把javascript的函数的参数想象成局部变量。

 

【完】

温故而知新,可以为师矣。

 

posted @ 2018-11-13 17:16  tangjiao_Miya  阅读(729)  评论(0编辑  收藏  举报