看了高教这本书,函数传递的章节,有这样的代码:
function setName(obj) {
obj.name = '小明'
obj = new Object()
obj.name = '小华'
}
var person = new Object()
setName(person)
console.log(person.name)
书上说的是函数参数是按值传递的,当在函数内部重写obj时,这个变量引用 的就是一个局部变量了,但是我自己写了一个:
var obj1 = new Object()
var obj2 = obj1
obj1.name = '小明'
obj1 = new Object()
obj1.name = '小华'
obj2.age = 22
console.log(obj1.age) //undefined
console.log(obj2.name) //小明
重写obj1后,改变obj1的值,obj2的值没有变,相反的改变obj2值后,也同样不会变,这不是跟函数的传参一样吗,都是按值传递的
1、基本类型数据(boolean、null、undefined、string和number)作为函数参数是按值传递
2、其他类型数据(object、array和function)作为函数参数是按共享传递,传递的是引用的拷贝(也可以理解为按值传递)