# 6/27 JavaScript expression表達式 //表達式會有結果 statement陳述句 //一個陳述句會有很多表達式 REPL = Read Eval Print Loop undeiined //存在但沒有設定值 no defined //不存在 JS有兩階段 建立期跟執行期 建立期 = 註冊名稱(identifier+初始化(undefined) 執行期=執行函數/賦值 沒有初始化一樣可以賦值 var會做初始化(undefined) let不會做初始化(undefined)所以會報錯但並不是not defined let會有TDZ TDZ=Temporal Dead Zone暫時死區 //因為沒有宣告所以暫時不能用 const可以改變內容 但無法重新指定re-assign 函數在第一階段就能做完 所以宣告寫在前面還是可以運作 not a function = undefined 重點是在var跟let是否會初始化 要用function才能把var關起來 全域物件:window(瀏覽器專用) 只要是在window裡的物件就可以不用加window 全域變數跟函式會污染全域物件 如果用var設定window裡的物件會報錯 ```javascript let a //宣告 a = 1 //給值 let a = 1 //宣告後給值 "use strict" 嚴格模式因為相容性所以使用字串 const > let >>>> var ``` 詞彙範疇 scope寫在哪就從哪裡抓 function就像是一個泡泡 執行完就會破掉並回傳值 return只能放在function裡面 call stack呼叫堆疊 只有一個也會堆疊 如果有呼叫其他函式越上面的會堆疊在最下面 堆疊理論上是無上限但程式或是記憶體受限會有上限 stack overflow SSOT //single source of truth type coercion