語法作用域 = 靜態作用域
靜態作用域 及 動態作用域 之間的差別牽涉直譯語言的解譯及運行流程。
- 資料參考: 六角學院 JavaScript 核心篇
JS 採用的是語法作用域, 只要確定你的作用域, 就不會再改變。
範例1
範例1 測試結果如下:
利用全域console.log() 去測試, 可否顯示函式 callname()作用域的值。
顯示出來的結果
callname()作用域的變數value, 用外層console.log 去讀取會得到: Uncaught ReferenceError value is not defined
原因:
全域console.log() 無法去 callname() 作用域去讀取該變數!
範例2
此範例我們加入全域變數 let name =’張小姐’
我們會知道最後被執行的call2()函式
原因:
call2()函式內部有呼叫 callname() 函式, 而callname()函式作用域內並沒有宣告name變數, 所以callname() 函式會去全域變數查找name值(綠色箭頭部分) 。