首先回調函數:這是一個異步過程,簡單說就是,在一個函數的執行過程當中,我去作我該作的事,在這期間我無論你,你能夠去作你的事。可是當我作完個人事,以後,我就得通知你,接下來就看你的了。
好比:java
function doSomething (callback) { //在這裏你能夠作你的事。 callback("PengL"); } function callbackFunc(name) { alert("I am "+name); } doSomething(callbackFunc);
這裏就展示了一個基本的回調函數。node
而後非阻塞:正是由於有了回調函數咱們才能達到非阻塞的目的,非阻塞就是我在一刻不停得作事,一直不停下來。
咱們來看個例子吧編程
console.log("程序時間:"+new Date().getTime()); setTimeout(function () { console.log("暫停一秒:"+new Date().getTime()); }, 1000); console.log('這是暫停一秒以後的時間:'+new Date().getTime());
從這裏咱們能夠看到執行的順序是第一個console.log以後,遇到setTimeout,而後直接去執行第三個console.log,一秒後再來執行中間的那個。這個和java或者C#,C++都不同。這就是非阻塞,當遇到須要等待的時候,直接跳過,等這邊完了,再來執行。因此當咱們在寫代碼時,就得注意一下這個特性,好比筆者最開始學的java面向對象編程,到了js這邊開始遇到這樣的問題還不知道怎麼回事。
好比在c#中c#
console.writeLine("如今的時間"+DateTime.Now.ToString("HH:mm:ss")); Thread.Sleep(1000); console.writeLine("如今的時間"+DateTime.Now.ToString("HH:mm:ss"));
程序就會真的等一秒再執行下一步。這就是阻塞。多線程