iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 4
0
自我挑戰組

學JS的心路歷程系列 第 4

學JS的心路歷程 Day4 - 參數的傳遞方式(上)

很多人認為JS的傳遞方式是 值是Call by value,
物件及陣列是Call by Reference。甚至還有人宣稱其實JS是Call by sharing,那到底是哪一個呢?

這兩天我們一一來分析這三種參數傳遞方式:

我們都以這個例子作為圖解分析:

var x = "Hola";
var y = x ;

Call by value

會直接把值拷貝過去

  1. 首先會先執行 var x = "Hola",宣告一個變數 x並初始化其值為"Hola"

  2. 再來執行var y = x,宣告一個變數y初始化其值為複製x的值,也就是"Hola"

這就是 Call by value 的原理,很簡單對吧?

Call by reference

當第一個變數存在一個值,而另一個變數要取其值時候,只會拿到對方的記憶體位置。

  1. var x = "Hola":

  2. var y = x,宣告變數y並初始化其值為x記憶體位置:

所以我們如果修改y的值,會經由0x11找到x的值並修改。

Call by sharing

跟call by reference 非常類似,只是存放值的空間是獨立的,任何變數的值都只能擁有其記憶體位置。

  1. var x = "Hola",宣告變數x並初始化其值為Hola記憶體位置。

  2. var y = x,宣告變數y並初始化其值為Hola記憶體位置。

這個有點像C++中指標的概念,變數只能存放 唯讀的記憶體位置,要修改必須透過記憶體位置找到值Hola並修改其值。

今天我們說了三種參數的傳遞方式,明天我們會來實作JS程式,來探討到底JS是使用哪種參數傳遞。

以上資訊若有錯誤歡迎留言校正!

參考:
深入探討 JavaScript 中的參數傳遞:call by value 還是 reference?
JavaScript - 參數傳遞方式 (1)
C語言: 超好懂的指標,初學者請進~


上一篇
學JS的心路歷程 Day3-範圍 Scope 和 提升(Hoisting)
下一篇
學JS的心路歷程 Day5-參數的傳遞方式(下)
系列文
學JS的心路歷程30

尚未有邦友留言

立即登入留言