JS是单线程的。

    但是,JS的运行环境-浏览器、Node.js是多线程的。

    js异步编程中的异步并不是指写代码的方式,而是指运行环境提供的API是以同步模式还是异步模式的方式工作。

    同步模式的API(例如console.log())是必须要等这个API的任务执行完成代码才会继续往下执行,会对后续代码造成阻塞。

    异步模式的API(例如setTimeout())是下达这个任务执行的指令后就会继续往下执行,代码不会等待这个任务的结束。
    image.png这样就出现了JS异步编程,目前浏览器环境下,JS异步编程的方案有回调函数、事件监听、发布订阅、promise、generator、async/await这几种方式。