前端经典面试题合集, JS 如何顺序执行 10 个异步任务?
前端经典面试题合集, JS 如何顺序执行 10 个异步任务?
QA
Step 1
Q:: JS 如何顺序执行 10
个异步任务?
A:: 可以通过以下几种方式来实现:
1.
使用回调函数(callback)来依次执行任务,但这种方法代码难以维护。
2. 使用Promise链,将每个异步任务封装成一个Promise,然后通过.then()
方法依次调用。
3. 使用async/
await,使代码看起来像同步代码,更加直观。例子如下:
async function executeTasks(tasks) {
for (const task of tasks) {
await task();
}
}
const tasks = [task1, task2, task3, ...];
executeTasks(tasks);
Step 2
Q:: 什么是闭包?如何在JavaScript中使用闭包?
A:: 闭包是指那些能够访问自由变量的函数。换句话说,函数可以记住并访问其词法作用域,即使函数在其词法作用域之外执行。使用闭包的一个常见场景是创建私有变量。例如:
function createCounter() {
let count = 0;
return function() {
count++;
return count;
}
}
const counter = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2
Step 3
Q:: 解释一下事件循环(Event Loop)机制
A:: 事件循环是JavaScript处理异步操作的一种机制。JavaScript是单线程的,通过事件循环来处理异步任务,包括回调函数、Promise等。事件循环的主要步骤是:
1.
执行栈中的同步任务依次执行。
2.
当遇到异步任务时,将其挂起并继续执行其他同步任务。
3.
当异步任务完成时,将其回调函数加入到任务队列。
4.
事件循环不断检查执行栈是否为空,如果为空则从任务队列中取出回调函数并执行。
Step 4
Q:: Promise的状态有哪些?
A:: Promise有三种状态:
1.
Pending(等待):初始状态,既不是成功,也不是失败。
2.
Fulfilled(已实现):操作成功完成。
3.
Rejected(已拒绝):操作失败。
一个Promise一旦从Pending状态变为Fulfilled或Rejected,就不会再改变状态。
Step 5
Q:: 什么是原型链?
A:: 原型链是JavaScript实现继承的一种方式。每个对象都有一个原型对象(proto),当访问一个对象的属性时,如果该对象本身没有这个属性,则会沿着原型链向上查找,直到找到该属性或到达原型链的顶端(即Object.
prototype)。