Scope筆記

@yu19941994
@yu19941994
Published in
Nov 28, 2020

基於「經典面試題」,淺談 Scope,或者更正確的來說是 Lexical Scope(語彙範疇)

var 是 function scope 的

而 let、const 則是 block scope

那也就是說 var 所宣告的變數範圍,在 function() 裡面;而 let、const 所宣告的變數範圍,則只在 {} 裡面。如下範例

console.log 找的到 i
會跳錯,找不到 i

接著來看經典案例,今天,我想要印出 1~9,但這樣寫卻給我印出 10 個 10

印出了 10 個 10

這是因為,執行完 function a() 後,i 已經等於 10 了,而這個時候要去執行 setTimeout,於是就依照 範圍鍊 去找值,再傳進去的時候,已經是 10 了,然後 setTimeout 又跑了 10 次,所以就出現了 10 個 10

成功印出 0–9

但,改用 let,塊級作用域(block scope)的特性,就會把 let 「關起來」,也就是說會有 let = 0、let=1、let=2…..

然後當 setTimeout 在執行時,網上查找,就可以成功印出 0–9 囉!

*新手學前端,所紀錄僅為吸收網路文章後,所做的匯整筆記,有錯歡迎留言指正

--

--