JavaScript起步(二十五)| 一起学系列

52 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第23天,点击查看活动详情

  • 回调函数

    - 回调函数就是传递一个参数化的函数,就是将函数作为一个参数传到另一个主函数里面,当那一个主函数执行完之后,再执行传进去的作为参数的函数。走到这个过程的参数化的函数就叫做回调函数。

    - 也就是被作为参数传递到另一个函数(主函数)的那个函数就叫做回调函数     image.png

  • 线程和阻塞

    - 多线程:一个进程可以同时进行多个任务的并行处理

    - 单线程:在某一时刻只能执行特定的一个任务

    - 阻塞:一个任务在执行时,后面的任务必须等待

    - 非阻塞:一个任务在执行时,后面的任务不需要等待

    - JavaScript是单线程非阻塞的

  • 同步和异步

    • 同步处理:一个同步任务的执行,需要等待前面的任务加载完成

    • 异步处理:一个异步任务的执行,它后面的其他任务不需要等待,而异步任务自己也会立即执行,执行结束后,会通过状态、通知和回调来通知整个线程

    • JS中的异步:setInterval、setTimeout、事件触发

  • 事件循环机制

    - JS是单线程,因此在执行时只有一个主线程,每个任务必须顺序执行。如果当前任务执行时间过长,会导致接下来的所有任务都处于阻塞状态,进而导致浏览器卡死等我们不希望看到的状况

    - 为了解决阻塞问题,出现了事件循环机制(Event Loop)     image.png - 当一段代码中既有同步任务,又有异步任务时,进程会默认先执行同步任务(即将同步任务放到执行栈中),然后将异步任务放到堆(只是一个比喻,其实并没有堆)中,在堆中也会执行任务,但是不会放入到执行栈中,会根据异步任务的等待时间或是先后进来的顺序,依次将异步任务放到任务队列中。在执行栈中的同步任务执行完成后,任务队列中的异步任务会进入执行栈依次执行。当这些任务中又存在异步任务时,还是会放到堆中,排序后依次进入任务队列,这样循环。当执行栈执行完成后,发现任务队列没有任务时,该进程执行的任务就算完成了 - 代码分析案例:输出结果为1 2 3 4 延时1 延时2 延时3 延时4 image.png