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都是单线程的。但愿我这样举的例子,能给一些同窗带来帮助。

相关文章
相关标签/搜索