JavaScript在浏览器中靠引擎(如V8)解析执行:先生成AST再转字节码;通过调用栈与事件循环实现单线程异步;作用域链与闭包决定变量访问;内存由堆栈分配并自动垃圾回收。

JavaScript 在浏览器中运行,靠的是内置的 JavaScript 引擎(比如 Chrome 的 V8、Firefox 的 SpiderMonkey),它把人类写的代码一步步翻译成机器能理解的指令并执行。
代码从哪里来?加载与解析
浏览器拿到 HTML 后,遇到 标签或 src 外链 JS 文件,就会开始下载并解析。解析不是直接执行,而是先生成抽象语法树(AST),再转换成字节码或机器码。
- 内联脚本(写在 HTML 里的)会按顺序立即解析
- 外链脚本默认会阻塞 HTML 解析,除非加
async或defer -
async:下载不阻塞,下载完立刻执行(可能打乱顺序) -
defer:下载不阻塞,等 HTML 解析完、DOM 构建好后再按顺序执行
执行过程:调用栈 + 事件循环
JS 是单线程语言,靠“调用栈”管理函数执行,靠“事件循环”协调异步任务。同步代码进调用栈,立刻执行;异步操作(如定时器、网络请求)先交给浏览器 API 处理,完成后把回调放进任务队列,等调用栈空了,事件循环再把它推入栈中执行。
- 宏任务(macrotask):整体 script、
setTimeout、setInterval、I/O 等 - 微任务(microtask):
Promise.then、queueMicrotask、MutationObserver - 每次宏任务执行完,会清空所有当前微任务队列,再取下一个宏任务
变量与作用域:执行上下文和闭包
每执行一个函数,JS 引擎就创建一个执行上下文(Execution Context),包含变量对象(VO)、作用域链(Scope Chain)和 this 值。全局代码也有自己的上下文。作用域链决定了变量查找顺序——先找当前作用域,找不到就沿链向上找父级,直到全局。
第一步】:将安装包中所有的文件夹和文件用ftp工具以二进制方式上传至服务器空间;(如果您不知如何设置ftp工具的二进制方式,可以查看:(http://www.shopex.cn/support/qa/setup.help.717.html)【第二步】:在浏览器中输入 http://您的商店域名/install 进行安装界面进行安装即可。【第二步】:登录后台,工具箱里恢复数据管理后台是url/sho
立即学习“Java免费学习笔记(深入)”;
- 函数定义时就确定了它的词法作用域(不是调用时)
- 闭包就是函数记住了自己定义时的作用域,即使外部函数已执行完毕,内部函数仍可访问那些变量
-
let/const有暂时性死区(TDZ),声明前访问会报错;var会变量提升但初始化为undefined
内存与垃圾回收
JS 自动管理内存:分配给对象、数组、函数等的数据存在堆(heap)里;基本类型(number、string、boolean 等)存在栈(stack)里。当变量不再被任何活跃的执行上下文或闭包引用时,垃圾回收器(GC)会在合适时机回收对应内存。
- V8 使用分代式回收:新生代(Scavenge)处理短期存活对象,老生代(Mark-Sweep & Mark-Compact)处理长期对象
- 避免内存泄漏的关键是及时解除对不需要对象的引用,比如移除事件监听器、清空定时器、断开 DOM 引用
-
console.log有时会意外保留对象引用,调试完记得删掉
基本上就这些——引擎解析、单线程调度、作用域规则、自动内存管理,四者配合让 JS 在浏览器里跑起来。不复杂但容易忽略细节。









