首先回调函数:这是一个异步过程,简单说就是,在一个函数的执行过程当中,我去作我该作的事,在这期间我无论你,你能够去作你的事。可是当我作完个人事,以后,我就得通知你,接下来就看你的了。
好比: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"));
程序就会真的等一秒再执行下一步。这就是阻塞。多线程