Scope筆記
Published in
Nov 28, 2020
基於「經典面試題」,淺談 Scope,或者更正確的來說是 Lexical Scope(語彙範疇)
var 是 function scope 的
而 let、const 則是 block scope
那也就是說 var 所宣告的變數範圍,在 function() 裡面;而 let、const 所宣告的變數範圍,則只在 {} 裡面。如下範例
接著來看經典案例,今天,我想要印出 1~9,但這樣寫卻給我印出 10 個 10
這是因為,執行完 function a() 後,i 已經等於 10 了,而這個時候要去執行 setTimeout,於是就依照 範圍鍊 去找值,再傳進去的時候,已經是 10 了,然後 setTimeout 又跑了 10 次,所以就出現了 10 個 10
但,改用 let,塊級作用域(block scope)的特性,就會把 let 「關起來」,也就是說會有 let = 0、let=1、let=2…..
然後當 setTimeout 在執行時,網上查找,就可以成功印出 0–9 囉!
*新手學前端,所紀錄僅為吸收網路文章後,所做的匯整筆記,有錯歡迎留言指正