/xia栽ke:52xueit.com/565/
同步操作和异步操作是编程中处理任务的两种不同方式,它们主要区别在于控制流和对程序执行的影响。不知道大家是怎么理解JavaScript中的同步和异步的?JavaScript的代码执行顺序是怎么样?下面这段代码是同步还是异步的? javascript复制代码console.log('Start'); const response = await fetch('juejin.cn'); const data = await response.json(); console.log('Data received:', data); console.log('End'); 同步操作 (Synchronous) 定义: 同步操作会阻塞当前线程或进程,直到该操作完成。这意味着当一段代码执行同步操作时,后面的代码必须等待该操作完成才能继续执行。在同步操作中,任务按顺序执行,一个任务必须完成后才能执行下一个任务。这种方式会阻塞程序的执行,直到当前任务完成。 特点: 简单直观,代码按照从上到下的顺序执行。 在执行耗时操作时会阻塞其他任务,可能导致UI无响应(在前端JavaScript中)。 JavaScript示例: javascript复制代码console.log('Start'); function synchronousTask() { for (let i = 0; i < 1000000000; i++) { /* 耗时任务 */} console.log('Task done'); } synchronousTask(); console.log('End'); 在这个例子中,循环是一个简单的模拟耗时操作。当这段代码执行时,console.log('Start'); 先执行并打印 Start,synchronousTask(); 开始执行,直到循环结束,才会打印出 "End"。在此期间,无法处理其他任务或用户交互。 异步操作 (Asynchronous) 定义: 异步操作允许程序在等待某个操作完成的同时继续执行其他任务,不阻塞当前线程。异步操作通常用于处理I/O操作、网络请求、定时器等潜在的长时间操作。 特点: 程序可以继续执行其他任务,提高应用的响应性和性能,特别是在处理I/O密集型任务时。 代码逻辑更复杂,需要回调函数、Promises或async/await来处理异步流程。 我们从代码中理解异步,这里使用一个定时器,JavaScript示例: javascript复制代码console.log('Start'); function asynchronousTask() { setTimeout(() => { console.log('Task done'); }, 1000); } asynchronousTask(); console.log('End'); 在这段代码中,执行顺序如下所示: console.log('Start'); 先执行并打印 Start asynchronousTask(); 开始执行,setTimeout 设置了一个异步任务,这个任务在 1 秒后执行,但不会阻塞程序 console.log('End'); 立即执行并打印 End 1 秒后,异步任务完成,console.log('Task done'); 执行并打印 Task done 但是一般在写代码的时候,我们的异步操作肯定不是通过定时器完成的,下面给大家展示两种异步操作写法,分别如下所示: 1、使用 Promise 处理异步操作 javascript复制代码console.log('Start'); function asynchronousTask() { return new Promise((resolve) => { setTimeout(() => { resolve('Task done'); }, 1000); }); } asynchronousTask().then(message => { console.log(message); }); console.log('End'); 在这个例子中: asynchronousTask 返回一个 Promise,它在 1 秒后解决(resolve) console.log('Start'); 和 console.log('End'); 立即执行 1 秒后,Promise 被解决,console.log(message); 打印 Task done