---
# System prepended metadata

title: '[Javascript] 觀念集'
tags: [JavaScript]

---

# [Javascript] 觀念集

 ###### tags: `JavaScript`

* 無論是var變數或者function函數，系統都直接存入記憶體裡
* function函數：皆會優先執行無論呼叫順序在哪裡，function皆會優先執行
* Var變數：創立變數後系統便會存入記憶體中，若還未創建value值，或者呼叫指令在設定值之前，系統會顯示undefined(js設定的初始值)，而非no defined的系統錯誤訊息
* 第一階段是創造階段，會產生執行環境，把變數放進記憶體中，並將變數設定為undefined

### JS執行原理

* Single threaded 單執行緒：一次執行一個指令
* Synchronous 同步：按照順序一次執行一個

![](https://i.imgur.com/fWPpZhe.png)


![](https://i.imgur.com/WH8yiJx.png)

執行結果
1
2
undefined
1(不會受到前面執行影響，執行同階層的值)

### Scope chain 
### 
![](https://i.imgur.com/yem0CpW.png)


### 案例一
a()結果為1，傳至function b找不到值，回最初執行環境搜尋到Var myvar =1
![](https://i.imgur.com/3VnoxVD.png)
### 案例二
a()值為2，至function b()找不到值後，先至同一function階層的找到Var myVar =2，因此顯示結果為2
![](https://i.imgur.com/QTdWAD2.png)


### 非同步事件
利用同步的方式執行非同步事件
* Javascript引擎會先跑執行堆後才處理事件列，依照事件的順序一批一批執行
* 順序為function --> event
