# [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