老师关于异步最后的一点疑问

老师关于异步最后的一点疑问

请问老师关于js异步我昨天查阅了资料等等

我最后想请教的一个问题就是关于js异步是不是都是完全不同的(存在多个不同的异步处理机制)

比如事件的js异步处理机制,浅显的理解是不是相当于浏览器分出了一个线程检测事件,如果事件触发则单另一个线程在浏览器中执行事件的触发

<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <title></title>
    <style>
        div{
            background-color: red;
            width: 100px;
            height: 100px;
            top:0;
            left: 0;
            position: absolute;
            color:red;
        }
    </style>
    <script src="http://libs.baidu.com/jquery/1.9.1/jquery.js"></script>
</head>

<body>
    <div id='one'></div>
    <script type="text/javascript">
    var one =document.getElementById('one');
    // var str={"date":"one","name":"xiaowang"};
    one.onclick=function(){
        console.log('one');
    }
    console.log(1);
    console.log(2);
    one.click();
    console.log(
        3);
    console.log(4);
    console.log(5);

    </script>
</body>

</html>
这段代码输出顺序1
 2
 one
 3
 4
 5 
 表示事件一旦触发就会直接在浏览器中执行(ajax异步的机制和事件触发机制一样是吗)

settimeout异步的机制是不是又是另一个异步

比如

<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <title></title>
    <style>
        div{
            background-color: red;
            width: 100px;
            height: 100px;
            top:0;
            left: 0;
            position: absolute;
            color:red;
        }
    </style>
    <script src="http://libs.baidu.com/jquery/1.9.1/jquery.js"></script>
</head>

<body>
    <div id='one'></div>
    <script type="text/javascript">
    console.log(1);
    setTimeout(function(){
        console.log('执行定时器');
    }, 0);
    console.log(2);
    console.log(3);
    console.log(4);
    console.log(4);
    console.log(4);console.log(4);
    console.log(4);console.log(4);console.log(4);
    console.log(4);console.log(4);
    console.log(4);console.log(4);console.log(4);
    console.log(4);console.log(4);console.log(4);console.log(4);
    console.log(4);console.log(4);console.log(4);console.log(4);
    console.log(4);console.log(4);console.log(4);console.log(4);
    console.log(4);console.log(4);console.log(4);console.log(4);
    console.log(4);console.log(4);console.log(4);console.log(4);
    console.log(4);console.log(4);console.log(4);console.log(4);
    console.log(4);console.log(4);console.log(4);console.log(4);
    console.log(4);console.log(4);console.log(4);console.log(4);
    console.log(4);console.log(4);console.log(4);console.log(4);
    console.log(4);console.log(4);console.log(4);
    console.log(4);console.log(4);console.log(4);
    console.log(4);console.log(4);console.log(4);
    console.log(4);console.log(4);console.log(4);
   
    </script>
</body>
定时器中的回调虽然为0但是会在主线程执行完成之后才会执行。

所以老师我想请教是不是说

js异步事件(包括ajax)的机制是说 虽然js是单线程,但是浏览器会分出一个时间去检测事件。一旦触发(ajax一点发送完成)浏览器会同步的在一个线程中执行他的事件函数(ajax回调的函数)。

而定时器的函数,他所谓的异步是指耗时操作只有在主线程执行完所有代码之后才会执行定时器的回调 

请老师指点迷津

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

ajax的理解是正确的,但是点击事件就是代码从上到下的执行顺序而已,不要想那么复杂。

祝学习愉快~~

  • hy_wang 提问者 #1
    请问一下老师点击事件是事件触发就异步和主线程同时执行还是说是需要等待主线程空闲才能执行触发事件绑定的函数。
    2018-10-17 14:22:50
  • 好帮手慕星星 回复 提问者 hy_wang #2
    点击事件和异步是没有任何关系的哦,只是一个普通的方法被调用了,然后执行里面的代码。异步的操作主要是定时器,ajax等。不要总是纠结在这个地方了,先学好本章的知识才是重要的。
    2018-10-17 14:46:57
提问者 hy_wang 2018-10-17 13:08:35

上述关于ajax的表达可能有误解。

ajax的异步,是不是说就是 浏览器分出线程去发送以及接受ajax请求,也就是ajax请求会和主线程在浏览器中异步进行发送和请求。但是ajax的回调callback仍然是和settimeout一样,虽然发送请求成功了,但是success的回调仍然会等到主线程空闲才会执行是吗。(而点击事件的异步是浏览器专门有一个事件驱动机制去监听事件,一定事件触发。浏览器有单独有一个线程直接执行事件绑定的函数而不必加入队列等待主线程空闲才执行)

请问老师这样浅显的理解哪里有错误请老师指出

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
组件化思想开发电商网页 18版
  • 参与学习           人
  • 提交作业       467    份
  • 解答问题       4826    个

本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师