美文网首页
JavaScript中的参数传递问题

JavaScript中的参数传递问题

作者: novaDev | 来源:发表于2018-04-09 18:12 被阅读0次

    先来热身:

    // 代码片段1
    
    var n = 10
    function addTen(n) {
        n += 10
    }
    addTen(n)
    //此时n是20吗?
    
    // 代码片段2
    
    var obj = {}
    function addName(obj) {
        obj.name = 'obj'
    }
    addNunber(obj)
    //此时obj.name == 'obj'吗?
    
    // 代码片段3
    
    var obj = {}
    function setNull(obj) {
        obj = null
    }
    setNull(obj)
    //此时obj == null吗?
    

    揭晓谜底:

    代码片段1 n 仍然是10
    代码片段2 obj.name == 'obj'
    代码片段3 n != null
    

    原理分析

    • 代码片段1
      // 代码片段1
      
      var n = 10
      function addTen(n) {
          n += 10
      }
      addTen(n)
      
      外部的n的值被复制给addTen函数的一个局部变量n,两个n只是值相等,但是没有任何引用关系,所以当内部的n发生变化时,外部的n不会跟着发生变化
    • 代码片段2
      // 代码片段2
      
      var obj = {}
      function addName(obj) {
          obj.name = 'obj'
      }
      addNunber(obj)
      
      外部的obj被复制给addName的一个局部变量obj,内部的obj可以根据引用,访问外部的obj,当对obj进行操作或访问的时候,实际上操作的是外部obj
    • 代码片段3
      // 代码片段3
      
      var obj = {}
      function setNull(obj) {
          obj = null
      }
      setNull(obj)
      
      外部的obj被复制给addName的一个局部变量obj,因为内部obj只是外部obj的一个拷贝,所以将内部obj赋值为null的时候,只是改变了内部obj的引用,不会影响外部obj

    相关文章

      网友评论

          本文标题:JavaScript中的参数传递问题

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