美文网首页
JavaScript中的值传递和引用传递

JavaScript中的值传递和引用传递

作者: js好难学啊 | 来源:发表于2018-08-08 23:30 被阅读0次
    2018/08/07

    先说说我对这两个传递的理解吧

    • 值传递
      将变量的值重新复制到另外一个变量上,两者之间并没有其他任何的关联
    • 引用传递
      将变量指向堆内存中的指针复制到另外一个变量上,简单的说就是其中一个值发生了改变,另外一个也改变了。(这只是我个人浅浅的理解)
    1. 值传递
      在JavaScript中5种基本数据类型都是按值传递的。
    let foo = 1
    let bar = foo
    
    bar = 2
    console.log(foo) // foo = 1
    
    1. 引用传递
      那么还有一个Object的数据类型肯定是按照引用传递的了
    let foo = {
      message: 'i am message'
    }
    let bar = foo
    
    bar.message = 'no, i am text'
    console.log(foo) // foo = {message: "no, i am text"}
    

    //我女朋友看小说把眼睛都看花了真的拼啊 2018/08/07 23:19

    2018/08/08

    继续昨天的说:
    在我刚刚看到引用传递时,我以为是如下这个例子的

    let foo = {
      message: 'i am message'
    }
    let bar = foo
    
    bar = 'no, i am text'
    // [我以为它会变成'no, i am text']
    //结果显然我是错的
    console.log(foo) // foo = {message: 'i am message'}
    console.log(bar) // bar ='no, i am text'
    

    感觉就是当bar被重新赋值时,原来指向foo的指针就断开了。 我对这个的理解非常差,希望有大神看到的时候可以指正我。

    参数传递

    红宝书中说到: ECMAScript中所有函数的参数都是按值传递的。

    参数传递可以传递基本数据类型和引用数据类型。

    • 传递基本数据类型时,是将被传递的值复制给了一个局部变量。
    • 传递引用数据类型是,是将被传递的值在内存中的地址复制给了局部变量

    常见的Demo就不记录了, 记录一个红宝书中的例子

    function setName(object) {
      object.name = 'Jack'
      object = new Object() //我感觉在此处与上文相似,指向原object的指针断开了,指向了新的元素
      object.name = 'Owen'
    }
    
    let person = new Object()
    setName(person)
    console.log(person.name)
    

    //我女朋友又不睡觉,太可恶了每天都要我监督她 2018/08/08 23:30

    相关文章

      网友评论

          本文标题:JavaScript中的值传递和引用传递

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