前端 JavaScript 进阶面试题, promise.all 和 promise.allsettled 函数有什么区别?
前端 JavaScript 进阶面试题, promise.all 和 promise.allsettled 函数有什么区别?
QA
Step 1
Q:: promise.all 和 promise.
allSettled 函数有什么区别?
A:: Promise.all 和 Promise.allSettled 都是 JavaScript 中用于处理多个 Promise 的方法,但它们的行为不同。Promise.all 接受一个 Promise 数组,并在所有 Promise 都 resolve 的时候 resolve,如果任何一个 Promise 被 reject,则整个 Promise.all 的结果会被 reject。Promise.
allSettled 接受一个 Promise 数组,并在所有 Promise 都 settle(即每个 Promise 都完成,无论是 resolve 还是 reject)时 resolve,结果是每个 Promise 的状态和值的对象数组。
Step 2
Q:: 请解释 JavaScript 中的事件循环(Event Loop)以及它是如何工作的。
A:: 事件循环是 JavaScript 的一个机制,用于处理异步操作。JavaScript 是单线程的,事件循环允许它在等待异步操作(如 I/
O 操作或计时器)完成时不阻塞主线程。事件循环依赖于任务队列和微任务队列。宏任务(如 setTimeout)和微任务(如 Promise 的回调)被分配到相应的队列中,事件循环依次处理这些队列中的任务,确保异步操作能够及时得到处理。
Step 3
Q:: 什么是闭包(Closure),它有什么作用?
A:: 闭包是指函数可以记住其定义时所在的词法作用域,即使函数在词法作用域之外执行。闭包可以访问其外部函数的变量,甚至在外部函数执行完毕之后。闭包常用于创建私有变量和函数、回调函数以及函数工厂等场景。
Step 4
Q:: 解释一下 JavaScript 中的原型链(Prototype Chain)。
A:: 原型链是 JavaScript 中实现继承的一种机制。每个对象都有一个内部链接指向另一个对象(即原型对象),这个原型对象也有自己的原型,形成一个链条。通过原型链,对象可以访问其原型链上的属性和方法,实现属性和方法的共享。
Step 5
Q:: JavaScript 中的异步编程方式有哪些?
A:: JavaScript 中的异步编程方式主要包括回调函数、Promise 和 async/await。回调函数是最基本的异步编程方式,通过将函数作为参数传递来执行异步操作。Promise 提供了一种更优雅的方式来处理异步操作和回调地狱问题。async/
await 是基于 Promise 的语法糖,使异步代码看起来更像同步代码,更加直观和易读。