JS進階之非阻塞

回調函數,阻塞和非阻塞對於初學者來講老是一些很差理解的東西,最好的辦法就是經過實際寫代碼去體會。筆者今天就經過一個例子來簡單解釋一下JS的非阻塞,分享分享個人理解。

首先回調函數:這是一個異步過程,簡單說就是,在一個函數的執行過程當中,我去作我該作的事,在這期間我無論你,你能夠去作你的事。可是當我作完個人事,以後,我就得通知你,接下來就看你的了。
好比: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"));

程序就會真的等一秒再執行下一步。這就是阻塞。多線程

因此java,C#等語言是多線程的,而JS,nodejs都是單線程的。但願我這樣舉的例子,能給一些同窗帶來幫助。

相關文章
相關標籤/搜索