技术文摘
js的运行方式
js的运行方式
JavaScript作为一门广泛应用于网页开发的脚本语言,其运行方式对于开发者理解代码执行过程和优化程序性能至关重要。
JavaScript是一种单线程语言,这意味着在同一时间它只能执行一个任务。在浏览器环境中,js的运行与浏览器的渲染引擎等密切相关。当浏览器解析到包含js代码的页面时,会创建一个执行栈。执行栈是一个先进后出的数据结构,函数调用会被压入栈中,执行完毕后从栈中弹出。
例如,当页面加载一个简单的js函数:
function sayHello() {
console.log('Hello World');
}
sayHello();
浏览器会将 sayHello 函数的调用压入执行栈,然后执行函数内部的代码,打印出“Hello World”,最后函数执行完毕从执行栈弹出。
然而,单线程的特性在处理一些耗时任务时可能会导致页面卡顿。为了解决这个问题,JavaScript引入了异步机制。异步任务不会阻塞执行栈的执行,而是被放入任务队列中。任务队列分为宏任务队列和微任务队列。常见的宏任务如 setTimeout、setInterval、DOM 事件等;微任务如 MutationObserver、Promise.then 等。
当执行栈为空时,事件循环机制开始工作。事件循环会不断检查任务队列,先处理微任务队列中的所有任务,直到微任务队列为空,然后再处理宏任务队列中的一个任务,如此循环往复。
比如:
setTimeout(() => {
console.log('setTimeout');
}, 0);
Promise.resolve().then(() => {
console.log('Promise.then');
});
console.log('main');
在这段代码中,首先会打印“main”,因为它在主线程执行。然后,Promise.then 作为微任务被放入微任务队列,setTimeout 作为宏任务被放入宏任务队列。事件循环先处理微任务队列,打印“Promise.then”,再处理宏任务队列,打印“setTimeout”。
了解JavaScript的运行方式,有助于开发者更好地编写高效、无阻塞的代码,提升用户体验,让网页应用更加流畅和稳定地运行。
TAGS: 运行环境 JavaScript运行机制 单线程运行 解析执行
- 浅析深度学习中模型与中间变量的显存占用计算
- Javascript 中数据类型的易忽视细节
- 同样开发,为何你逊于他人?
- 字节二面中的真实情况:伪共享究竟是什么?
- 面试官:解析 Java 中serialVersionUID 的作用并举例
- 或许是全网最为完整的 Python 操作 Excel 库汇总
- 鸿蒙 HarmonyOS 三方件之 SwipeLayout 侧滑删除开发指南
- 《蚂蚁呀嘿》开发者:借助华为云 ModelArts 自行实现
- 16 个令人震惊的黑科技工具 一口气推荐
- Go mod 的七宗罪,你知晓多少?
- 干货!大白话解读 Mock 测试
- 6 个 YAML 功能,多数程序员竟不知
- Spring Boot 中 AOP 记录日志的应用
- Go 语言实现的那些语言如今发展状况如何?
- 队列与栈的相互实现