前端面试系列-JS 异步编程

162 阅读1分钟

并发与并行的区别?

  • 并发是宏观概念,我分别有任务 A 和任务 B,在一段时间内通过任务间的切换完成了这两个任务,这种情况就可以称之为并发。
  • 并行是微观概念,假设 CPU 中存在两个核心,那么我就可以同时完成任务 A、B。同时完成多个任务的情况就可以称之为并行。

什么是回调函数?回调函数有什么缺点?如何解决回调地狱问题?

    ajax(url, () => {
        // 处理逻辑
    })
    // 会存在回调地狱

回调地狱问题

  • 嵌套函数存在耦合性,一旦有所改动,就会牵一发而动全身
  • 嵌套函数一多,就很难处理错误
  • 不能使用 try catch 捕获错误,不能直接 return

你理解的 Generator 是什么?(生成器,会返回一个迭代器)

注意next传参和yield返回值的关系

    function *foo(x) {
      let y = 2 * (yield (x + 1))
      let z = yield (y / 3)
      return (x + y + z)
    }
    let it = foo(5)
    console.log(it.next())   // => {value: 6, done: false}
    console.log(it.next(12)) // => {value: 8, done: false}
    console.log(it.next(13)) // => {value: 42, done: true}