前言
昨天在卡斯伯大大的臉書上面看了一則有趣的貼文。
雖然馬上就有人在留言下方分享答案了,不過還是想記錄一下這個有意思的問題。
正確的概念是 b = c 並且這條 statement 本身會有一個回傳值 (會是 c 的值),然後 a 收到的其實是這個回傳值。
但是這看起來似乎與 b = c, a = b 的結果一樣,而且也沒什麼辦法可以用實驗去證明。(除了自己在 console 上面分解動作外)
附上一個在 console 上的小的實驗:
1 | Welcome to Node.js v12.7.0. |
還有一個有趣的地方是使用 var 與 let 來初始化,回傳值是 undefined
1 | > let x = 3 |
也提醒大家以下這一條 statement 只有 a 是 let 屬性,其他變數 (b, c) 都是 global,不要搞混了!
1 | > let a = b = c |
PoC
講了這麼多有一點離題了,看一下官方公布的證明方式!
以上印出的東西是 1 {}
這個簡單的驗證方式勝過前面的千言萬語,我們可以發現 b 並沒有被寫入任何值, a 一樣拿到了 c 的值,而這個值實際上是 b.b = c 的回傳值(即使沒有成功寫入,還是會回傳 c 本身的值)。
之後有看到類似寫法,雖然知道結果為何,但同時也別忘了理解背後的概念!