iT邦幫忙

2023 iThome 鐵人賽

DAY 11
0
Software Development

Node.js隨手札記 想到什麼就說什麼的系列 第 11

第十一天 一點點變數提升一點點作用域

  • 分享至 

  • xImage
  •  

其實原本有點猶豫要不要分享這個東西,網路上真的有太多厲害的神人分享了,
但我覺得自己其實也不是很了解這個東西,所以也決定寫一篇,順便當自己內化的過程。

第一個例子

從這個例子可以了解到

  1. 用var宣告 變數(a)會被提升,而賦值(10)不會
    註解:undefined 意思是 有宣告這個變數,但卻沒值顯示undefined

第二個例子

  1. 可以發現function也會有提升的效果,因為程式理論上是一行一行跑的,在fucntion之前使用,能夠抓到其值,代表是有提升沒錯。

再來談談作用域

let 跟 const 都是屬於區塊作用域
而var則是函式作用域,甚至可以是全域的效果

何謂區塊作用域
也就是{} <===這個玩意
相對好理解很多。
直接上範例

let

let 跟 const作用域一樣,他們之間的差異是

let可以重複宣告,const不行,而且let重新宣告還滿特別的

老實說,我覺得再重新宣告一次let 好像會覺得比較一致性XD

而const 則是不管怎樣都不能重新「賦值」,而let則是可以改變「賦值」。
PS:賦值:意思是指,不會改變最初所設定的變數,而是重新這個變數賦值的意思
如圖

如果對方是object的話,情況又不太一樣了
上圖!

因為我們是更改物件裡面的值,而不是更改物件本身,也就是說在物件的狀況let 跟 const 都可以改變其內容的值

var 函式作用域+全域

懶人包:如果需要重新賦值 => let
誰都不要給我動初始值 => const
var呢?....老實說...他搞得我也好亂啊,ES6之後找不到適合他的地方惹

好了,除了我自己內化的過程,也希望各位小夥伴也能更近一步知道變數提升是什麼玩意了

我自己理解起來是有兩個關鍵

  1. let、const、var,都會提升自己到自己的作用域最高處
  2. 向外尋找的特性

關於第一點,上圖已經有稍微分享到我目前的認知了,至於第二個特性不囉唆
上圖

也就是說因為有向外尋找的特性,即使let只在區塊內作用域,但是當區塊內沒有的時候,他也會往外層去尋找有沒有相同的變數

所以結果才會是10,而不是預期的

ReferenceError: a is not defined

當然 如果我們把最外層let a = 10 註解掉,那就真的會出現上述的錯誤了

嘗試在搜集一些資料後,用自己的理解再把他打出來分享給大家,也希望能夠幫助大家多一點初步的理解。

參考資料

MDN

我知道你懂 hoisting,可是你了解到多深?

ExplainThis


上一篇
第十天 嘗試做一點小練習吧#3
下一篇
第十二天 無用小知識
系列文
Node.js隨手札記 想到什麼就說什麼的30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言