[Day10] JavaScript - 传值 & 传参考

此篇应该接在[第五篇-资料型别]之後介绍,因为在JavaScript中,会依不同型别而有不同的传递参数的方式。

参数传递的方式分为:

  • 传值 (pass by value / call by reference)
  • 传参考 (pass by reference / call by reference)

前面提到JavaScript 的资料型态分为基本型别物件型别,而:

  • 当值的型别为 基本型别 时,那即是由"值"来传递,所以称为"传值"。
  • 当值的型别为 物件型别 时,则是以"传参考"的方式做传递。

传值 pass by value

  • 先看以下范例:
    这里输出的结果是true,person与person2的值完全一样,应该没有问题。

    var person = '小明';
    var person2 = person;
    console.log(person === person2);    //true
    
  • 若是以下情况:
    输出结果会是什麽呢?

    var person = '小明';
    var person2 = person;
    
    person = '小王';
    console.log(person === person2);   //??
    



    答案是false !

    这里即解释到了传值的观念:   (以下图例说明)
    当产生person物件时,会产生一个记忆体,并将"小明"放进去;person2=person时,即会再产生一个记忆体位置并将值复制过去,person2即指向这个记忆体位置的值。
    所以当person的值被改变时,并不会影响到person2的值。

https://ithelp.ithome.com.tw/upload/images/20211013/20141293wKS1ssjhtk.png

传参考 pass by reference

  • 先看以下范例:
    这里输出的结果是true,person与person2的值完全一样,应该也没有问题。

    var person = {
        name : '小明'
    }
    
    var person2 = person;
    console.log(person === person2);
    
    
  • 若是以下情况:
    输出结果会是什麽呢?

    var person = {
        name : '小明'
    }
    
    var person2 = person;
    person2.name = '小王';
    console.log(person.name);   //小明? 小王?
    
    



    答案是小王!

    这里即解释到了传参考的观念:  (以下图例说明)
    当产生person物件时,一样会产生一个记忆体位置(并新增属性:name & 值:小明);跟传值不一样的是,当person2 = person时,person2即会指向person的记忆体位置。
    所以当person的内容被改变时,person2也会跟着被改变。

    https://ithelp.ithome.com.tw/upload/images/20210910/201412930eFbn7crsE.png

    像这种透过引用的方式来传递资料,接收的其实是引用的「参考」而不是值的副本时,我们通常会称作「传参考」 (pass by reference)。

 
 
 

参考来源:
https://ithelp.ithome.com.tw/articles/10191057


<<:  Trouble with Distributed Systems (3-1) - Unreliable Clocks

>>:  Day 5 Compose UI Row Layout + Position

Day-7 Pipeline

Pipeline tags: IT铁人 Clock Cycle Time Clock Cycle T...

Day10你敢不敢给我登入

延续昨日 有了资料库之後再来就是想想如何登入! 登入的意思就是你输入的帐号密码都和资料库的帐号密码一...

寻觅 webpack - 27 - 真实世界的 webpack - 建立 webpack 生产环境 - 追踪建置

本系列已集结成书从 0 到 Webpack:学习 Modern Web 专案的建置方式,这是一本完...

【4】实验 Batch size大小对训练模型的影响

Colab连结 相信每个人在学习ML时,都会遇到超参数 Batch size 应该要设置多少才好的问...

Day 23: 174. Dungeon Game

Day 23: 174. Dungeon Game Tag:每月挑战(2021.10.02) Sou...