# Node.js 基礎觀念(1) ###### tags: `Node.js` ## Node.js事件驅動 Node.js 是一個單執行緒且非同步的語言 非同步的 function 會被放進一個 event queue 等其他 code 跑完之後才會跑那個 event queue 如果 queue 裡面有很多事要做就會依序做 所以不會阻塞執行緒 - setTimeout Javascript 最簡單的 async 函式是 setTimeout setTimeout 會在一定的時間之後執行某個函式 或說是在一定時間之後把那個函式放進 event queue 等其他事情都做完就會就會開始做 event queue 內的事情 來看看這一段 code - Example ```javascript= setTimeout(function(){ console.log('callback'); }, 1000); console.log('Hello World'); ``` 剛開始跑到 setTimeout 系統會設定在 1 秒之後把 function 要做的事放到 event queue 然後就繼續跑到下面輸出 “Hello World” 輸出結束之後這時候事情都做完了 等了一秒 function 被塞到 event queue 這時候沒有事情要做所以就開始跑 event queue 內的事情 然後就輸出 “callback” ## Callback function Callback function是源自於JS 「JavaScript 是一個事件驅動 (Event-driven) 的程式語言」 其實 Callback function 跟一般的函式沒什麼不同, 差別在於被呼叫執行的時機。 例如 辦公室電話響了 (事件被觸發 Event fired) -> 接電話 (處理事件 Event Handler) Office.addEventListener( '電話響', function(){ 接電話 }, false); 換句話說,這個函式只會在滿足了某個條件才會被動地去執行, 我們就可以說這是一個 Callback function 前後兩個事件為dependency 若使用一般c++的觀念,會導致程式執行順序錯誤。 ## 錯誤優先處理(Error-First Style) Node.js 的 API 常用這樣的設計方式, 第一個參數是 error,第二個參數是回應的資料(data)。 檢查 error 是否有值或為 true,若否則接續處理 data。 ## 同步執行、不同步執行 1. 同步執行 ( Scynchronous ) 同步處理就像是一般的程式邏輯的話, 都是按照你所寫的一行一行去執行, 而順序必定都是前一個動作執行完才會去接著執行下一個動作。 2. 非同步執行 ( Ascynchronous ) 簡單來講就是 等待前面步驟執行完之前可以先去執行後面的步驟。 ## String.match(regExp) The string.match() is an inbuilt function in JavaScript which is used to search a string for a match against a any regular expression and if the match will found then this will return the match as an array. Ex: string.match(/image/gi) Here “gi” parameter helps to find the case-sensitive match and all possible combination in the given string. For example `Input:` var string = "Welcome to GEEKS for geeks!"; document.write(string.match(/eek/gi); `Output:` EEK, eek