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的函数的参数想象成局部变量。
【完】
温故而知新,可以为师矣。