---
# System prepended metadata

title: 6/27
tags: [JavaScript]

---

# 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 //宣告
ａ = 1 //給值
let a = 1 //宣告後給值

"use strict" 嚴格模式因為相容性所以使用字串

const > let >>>> var
```
詞彙範疇
scope寫在哪就從哪裡抓

function就像是一個泡泡 執行完就會破掉並回傳值

return只能放在function裡面

call stack呼叫堆疊
只有一個也會堆疊
如果有呼叫其他函式越上面的會堆疊在最下面
堆疊理論上是無上限但程式或是記憶體受限會有上限
stack overflow

SSOT //single source of truth

type coercion

