美文网首页
函数的参数是按值传递

函数的参数是按值传递

作者: 弗利萨mom | 来源:发表于2021-03-10 21:45 被阅读0次

    先看个传参为原始值的例子

    function add (num) { // num其实是一个局部变量,是(在add函数被调用时候)count被复制到参数num的
           num += 10
          return num
    }
    let count = 100
    add(100)
    console.log(count) // 100 不受函数内部干扰,事实是参数num和变量count互不干扰
    

    下面讨论传参是引用值的例子

    function setName (obj) {
            obj.name = 'zhangsan'
    }
    let person = new Object()
    setName(person)
    console.log(person.name) // zhangsan
    

    当调用函数,函数内部给obj设置了name值,函数外部也反映了这个变化,但不代表函数传参是按引用传参。之所以函数外部也被干扰,是因为obj指向的对象保存在全局作用域的堆内存上。

    再看下面这个例子可以证明对象是按值传递的

    function setName(obj) {
         obj.name = 'zhangsan'
         obj = new Object()
         obj.name = 'lisi'
     }
    let person = new Object()
    setName(person)
    console.log(person.name) // zhangsan
    

    如果person是按引用传递的,那么person应该将指针改为name为lisi的对象,但我们访问person.name时,原始的引用仍然没变。
    当obj在本地被重写时,它变成了指向本地的指针,与函数外部的互不干扰。(这个本地对象在函数执行结束时被销毁了)

    相关文章

      网友评论

          本文标题:函数的参数是按值传递

          本文链接:https://www.haomeiwen.com/subject/nojgqltx.html