# 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