rfly_fly 2016-04-03 03:48 采纳率: 66.7%
浏览 1392

javascript异步编程和单线程之间的一些疑惑

这两天在研究js异步编程机制,查阅了很多资料,中文的英文的都有。大致上对js异步实现有些了解。但有几点不太理解。

第一个问题:

有一点无论是国内的资料还是英文的,都没有讲到到(可能是过于基础,本人是业余前端,对线程这一块不是很了解)。我们说javascript是单线程,即一次只能执行一个任务,前一个任务结束,后一个才会执行。这是从抽象后的javascript的语言层面说的,还是指各种编译环境内部本来就是单线程?

比如当Thread Pool里注册了各种事件,当有事件触发,就会将callback function 移至Event Queue,这一过程需要不断监听,是需要线程的吧?但此时Event loop本身就在不断监听执行栈和Event Queue,这又是一条线程。可能表述不清,我的意思是事件被触发,并且传递给事件列队和Event Loop不断监听并执行消息列队里的函数并不是同一线程完成的吗?或者事件是编译器底层通过另一个线程来监听,然后再传递给js线程?

第二个问题:

在阮一峰老师博客(链接描述)中写因为js异步执行,以下两段代码等价

var req = new XMLHttpRequest();
req.open('GET', url);

req.onload = function (){};

req.onerror = function (){};

req.send();
var req = new XMLHttpRequest();
req.open('GET', url);
req.send();
req.onload = function (){};

req.onerror = function (){};
但另一位专业js老师(链接描述)指出有错误【这个调用其实有个默认回调函数,Ajax结束后,执行回调函数,回调函数检查状态,决定调用onload还是onerror。所以只要在回调函数执行之前设置这两个属性就行】具体批注不太懂,请问是如何理解的呢?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥60 求一个简单的网页(标签-安全|关键词-上传)
    • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
    • ¥15 基于卷积神经网络的声纹识别
    • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
    • ¥100 为什么这个恒流源电路不能恒流?
    • ¥15 有偿求跨组件数据流路径图
    • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
    • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
    • ¥15 CSAPPattacklab
    • ¥15 一直显示正在等待HID—ISP