(求教)关于js函数按值传递的问题

看了高教这本书,函数传递的章节,有这样的代码:

    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.4k
2 个回答

1、基本类型数据(boolean、null、undefined、string和number)作为函数参数是按值传递
2、其他类型数据(object、array和function)作为函数参数是按共享传递,传递的是引用的拷贝(也可以理解为按值传递)

// 按顺序好理解:
var person = new Object() //person 指向内存地址 a,{}
setName(person) // 按引用传递内存地址a
function setName(obj) { // obj指向a
    obj.name = '小明' // a,{name: '小明'}
    obj = new Object() // obj指向内存地址 b,{}
    obj.name = '小华' // b,{name: '小华'}
}
console.log(person.name) // a,{name: '小明'}

函数传参并不是按值传递
js中只要记住 基本类型按值传递,引用类型按引用传递就行了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题