美文网首页
异步与单线程

异步与单线程

作者: tency小七 | 来源:发表于2018-05-26 11:16 被阅读0次

    单线程:一次只能做一件事情

            console.log(10);
        setTimeout(function(){
            console.log(20);
        },1000)
        console.log(30);//异步
        //打印结果是:10 20 30
    

    上面程序的执行顺序如下:

    • 执行第一行,打印10
    • 执行setTimeout时,这里面的函数会被存起来在一个队列里面,不会立即执行(不能同时处理两件事,与单线程特点有关)
    • 执行最后一行,打印30
    • 所有程序处理完,处理机处于空闲状态,立马看看队列里面有没有待执行的函数啥的
    • 发现setTimeout里面的函数,这个时候执行(也就是说,这个时候,一一秒过去,解禁,下面的题也可以这么理解) ,会打印出来20

    单线程和异步的关系

    相关面试题:
    同步和异步的区别在哪里,分别举一个同步异步的例子
    • 同步会阻塞代码运行,异步不会
      异步:

        console.log(10);
        setTimeout(function(){
            console.log(20);
        },1000)
        console.log(30);//异步
        //打印结果是:10 20 30
      

    同步:

        console.log(1000);
        alert(2000);//会阻塞,也就是不会产生异步
        console.log(3000);
        //打印结果是:1000 2000(按确定之后出现3000)  3000
    
    一个关于setTimeout的笔试题
        console.log(1);
        setTimeout(function(){
            console.log(2);
        },0)
        console.log(3);
        setTimeout(function(){
            console.log(4);
        },1000);//1 3 2 4
        //****************************
        console.log(1);
        setTimeout(function(){
            console.log(2);
        },1000)
        console.log(3);
        setTimeout(function(){
            console.log(4);
        },0);//1 3 4 2
    
        //**************************
        console.log(1);
        setTimeout(function(){
            console.log(2);
        },1000)
        console.log(3);
        setTimeout(function(){
            console.log(4);
        },1000);//1 3 2 4
    
    前端需要使用异步的场景是哪些

    (需要等待的时候)

    • 定时任务:setTimeout,setInterval
    • 绑定事件:addEventListener(click等等)
    • 网络请求:ajax和img动态加载

    相关文章

      网友评论

          本文标题:异步与单线程

          本文链接:https://www.haomeiwen.com/subject/lslejftx.html