• JS进阶之非阻塞


    回调函数,阻塞和非阻塞对于初学者来说总是一些不好理解的东西,最好的办法就是通过实际写代码去体会。笔者今天就通过一个例子来简单解释一下JS的非阻塞,分享分享我的理解。

    首先回调函数:这是一个异步过程,简单说就是,在一个函数的执行过程中,我去做我该做的事,在这期间我不管你,你可以去做你的事。但是当我做完我的事,之后,我就得通知你,接下来就看你的了。
    比如:

    function doSomething (callback) {
             //在这里你可以做你的事。
             callback("PengL"); 
        }
    function callbackFunc(name)
    {
        alert("I am "+name);
    }
    doSomething(callbackFunc);
    

    这里就展现了一个基本的回调函数。

    然后非阻塞:正是因为有了回调函数我们才能达到非阻塞的目的,非阻塞就是我在一刻不停得做事,一直不停下来。
    我们来看个例子吧

    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#中

    console.writeLine("现在的时间"+DateTime.Now.ToString("HH:mm:ss"));
    Thread.Sleep(1000);
    console.writeLine("现在的时间"+DateTime.Now.ToString("HH:mm:ss"));
    

    程序就会真的等一秒再执行下一步。这就是阻塞。

    所以java,C#等语言是多线程的,而JS,nodejs都是单线程的。希望我这样举的例子,能给一些同学带来帮助。

  • 相关阅读:
    android 图片全屏
    .9.png
    C++中的endl
    C++输入输出cin与cout
    word-search
    Java中的的画正三角方法
    octave中的一些基本操作
    C#中判断语句 if、if-else if、switch-case
    C#中的异常处理(try-catch的使用)——使程序更加稳定
    编程&blog处女篇-用C#求100以内的质数
  • 原文地址:https://www.cnblogs.com/PengL-Net/p/5724412.html
Copyright © 2020-2023  润新知