iT邦幫忙

2022 iThome 鐵人賽

DAY 25
0
自我挑戰組

I don't know JS yet系列 第 25

[ Day 25 ] I don't know JS yet - arrow function scope

  • 分享至 

  • xImage
  •  

今天是 Scope & Closure CH.3 的最後一篇文

先說為什麼要探討 arrow function scope,我們知道 arrow function 寫法很簡潔,甚至不用 function keyword 就能宣告一個函式,不用 {} 也能回傳值。所有與 function scope 有關的角色,arrow function 都省略了,那 arrow function 還有 scope 嗎?
答案是:有的。

const booking = genre => console.log(genre);

booking('ticket');  // ticket

console.log(genre); // ReferenceError: genre is not defined

booking 是個 arrow function,既沒有 function 也沒有 {},但在全域要調用 genre 時,卻發生 Reference Error。

原因在於,arrow function 與一般的 function 一樣,也有 scope,雖然看不出來,也沒有 curly braces,但 arrow function 是有 scope 的。

回顧 Scope & Closure CH.3

  1. 只要定義一個函式,就會產生一個 scope
  2. scope 可以是巢狀的,內外都可能會有其他 scope,端看 variable 在哪裡被定義,這些 scopes 形成了
    scope chain
  3. scope chain 決定 variable 可以在哪些 scope 調用,look up variable 方向是向上、向外的
  4. 當不同層的 scope 擁有同樣名稱的 variable,shadowing 發生了,此時內部的 variable 一定不會影響到 shadowed (上層) 變數,shadow 避免了同樣名稱的變數發生這種意外

參考


上一篇
[ Day 24 ] I don't know JS yet - function name scope
下一篇
[ Day 26 ] I don't know JS yet - 關於具名與匿名函式
系列文
I don't know JS yet30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言