当前位置: 首页 > article >正文

JS 入门通关手册(35):执行上下文、调用栈与作用域链深度解析

一、什么是执行上下文执行上下文Execution Context是 JS 代码运行时的环境JS 引擎会为每一段可执行代码创建一个上下文用来管理变量、作用域、this 指向等。简单理解一段代码在哪里跑、能访问什么、this 是谁都由执行上下文决定。JS 中有三种执行上下文全局执行上下文函数执行上下文eval 执行上下文极少使用可忽略二、执行上下文的生命周期一个执行上下文从创建到销毁分为两个阶段1. 创建阶段生成变量对象VO建立作用域链Scope Chain确定this 指向2. 执行阶段变量赋值函数执行代码逐行运行三、变量对象与活动对象1. 变量对象 VOVariable Object存储当前上下文中的变量声明函数声明函数形参2. 活动对象 AOActivation Object函数上下文被执行时变量对象会变成活动对象可以被访问。全局上下文没有 AO只有 VO。四、作用域链Scope Chain当代码访问一个变量时先在当前执行上下文的变量对象查找找不到 → 去父级执行上下文查找一直向上直到全局上下文都找不到 → 报ReferenceError这条查找路径就是作用域链。作用域链本质是当前上下文 AO 所有父级 VO 的链表。五、调用栈Call StackJS 是单线程代码执行顺序由调用栈管理。规则全局上下文先入栈永远在栈底调用函数时函数上下文入栈函数执行完毕上下文出栈最后全局上下文出栈程序结束示例jsfunction a() { function b() { console.log(b) } b() } a()调用栈顺序全局上下文入栈a 入栈b 入栈b 执行完出栈a 执行完出栈全局出栈六、作用域链与闭包的关系闭包之所以能访问外部函数变量就是因为内部函数的作用域链保留了外部函数的活动对象即使外部函数执行完毕出栈其 AO 依然被引用不会被销毁。这就是闭包的底层原理。七、执行上下文与 this 指向this 的绑定是在执行上下文创建阶段确定的全局上下文this → window普通函数调用this → window /undefined对象方法调用this → 调用对象new 调用this → 新实例call/apply/bindthis → 绑定对象箭头函数this 继承外层上下文八、高频面试题什么是执行上下文答JS 代码运行时的环境管理变量、作用域链、this。作用域链的作用是什么答按层级查找变量保证变量访问的有序性。调用栈溢出是什么原因答递归无出口函数无限入栈超过栈最大长度。闭包和作用域链的关系答闭包依靠作用域链保留外部函数 AO实现变量持久化。变量提升发生在哪个阶段答执行上下文创建阶段。九、总结执行上下文是 JS 代码运行的基础环境分为创建阶段VO、作用域链、this和执行阶段作用域链是变量查找的层级链路调用栈控制函数执行顺序闭包、this、变量提升都依赖执行上下文机制理解执行上下文才算真正懂 JS 运行机制

相关文章:

JS 入门通关手册(35):执行上下文、调用栈与作用域链深度解析

一、什么是执行上下文?执行上下文(Execution Context)是 JS 代码运行时的环境,JS 引擎会为每一段可执行代码创建一个上下文,用来管理变量、作用域、this 指向等。简单理解:一段代码在哪里跑、能访问什么、t…...

【Proteus 仿真实战】基于51单片机的智能测距与自适应报警系统设计

1. 项目背景与核心功能 最近在做一个基于51单片机的智能测距系统仿真项目,发现很多初学者对如何实现自适应报警功能特别感兴趣。这个项目最吸引人的地方在于它不仅仅是个简单的距离测量装置,而是能根据危险程度自动调整报警策略的智能系统。想象一下&…...

终极视频修复指南:如何使用Untrunc轻松恢复损坏的MP4/MOV文件

终极视频修复指南:如何使用Untrunc轻松恢复损坏的MP4/MOV文件 【免费下载链接】untrunc Restore a truncated mp4/mov. Improved version of ponchio/untrunc 项目地址: https://gitcode.com/gh_mirrors/un/untrunc 你是否曾经遇到过珍贵的视频文件突然无法播…...

Midscene.js:重塑UI自动化的革命性AI视觉驱动方案

Midscene.js:重塑UI自动化的革命性AI视觉驱动方案 【免费下载链接】midscene AI-powered, vision-driven UI automation for every platform. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 你是否曾为编写复杂的UI自动化脚本而头疼&#xff…...

ViGEmBus驱动全攻略:解锁游戏控制新可能

ViGEmBus驱动全攻略:解锁游戏控制新可能 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 1. 驱动异常诊断:从现象到本质的定位方法 当…...

5步搞定Jimeng LoRA测试台:Streamlit界面,LoRA版本智能排序

5步搞定Jimeng LoRA测试台:Streamlit界面,LoRA版本智能排序 1. 项目概述:轻量级LoRA测试系统 Jimeng LoRA测试台是一款专为模型开发者设计的轻量化文本生成图像系统。它基于Z-Image-Turbo文生图底座,实现了动态多版本LoRA热切换…...

课灵h5p-标签页 (Tabs)教程

标签页 (Tabs)教程 标签页 (Tabs) 是一种高效的内容容器,通过水平切换的选项卡界面来组织信息。它允许你在同一页面空间内并行展示多个同层级的主题(如不同类别的资源、不同语言的版本),帮助学习者按需浏览,保持界面整…...

炸锅!Claude Code 完整源码意外泄露,51 万行核心代码直接开源!

突发!Claude Code 意外开源 51 万行源码全网曝光 2026 年 3 月 31 日,AI 圈迎来重磅事件 ——Anthropic 旗下 Claude Code 因 npm 配置失误,通过 source map 文件意外泄露全部源码,超 1900 个文件、51.2 万行 TypeScript 代码公开…...

Obsidian插件翻译终极指南:5分钟让所有插件说你的母语

Obsidian插件翻译终极指南:5分钟让所有插件说你的母语 【免费下载链接】obsidian-i18n 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-i18n 你是否曾经因为喜欢的Obsidian插件只有英文界面而感到困扰?或者因为语言障碍而无法充分发挥插…...

MySQL服务从CentOS7迁移到Rocky Linux 9.4实施文档

一、文档概述 本文档针对CentOS 7系统上运行的MySQL服务迁移至Rocky Linux 9.4的完整实施流程进行说明,适用于生产环境下MySQL 5.7/8.0版本的迁移操作,涵盖迁移前准备、迁移执行、验证、回滚全流程,可有效控制迁移风险,保障业务连续性。 本次迁移可选两种方案:原地升级迁…...

以采购管理系统为例,构建多角色AI智能体协作系统

成果演示(基于 Trae Solo) 1.构建智能体Trae Solo 支持智能生成智能体,输入角色及职能描述,即可得到角色智能体。在此构建需求分析智能体、架构设计智能体、前端智能体、后端智能体进行演示。2.创建任务 本文依照需求分析、架构设…...

SeamlessM4T v2:跨语言实时对话的终极解决方案与技术实践

SeamlessM4T v2:跨语言实时对话的终极解决方案与技术实践 【免费下载链接】seamless-m4t-v2-large 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/seamless-m4t-v2-large 在全球化协作日益频繁的今天,跨语言沟通已成为技术团队、跨国…...

5分钟打造个人游戏库:FitGirl Repack Launcher高效管理方案

5分钟打造个人游戏库:FitGirl Repack Launcher高效管理方案 【免费下载链接】Fitgirl-Repack-Launcher An Electron launcher designed specifically for FitGirl Repacks, utilizing pure vanilla JavaScript, HTML, and CSS for optimal performance and customiz…...

3大核心功能+5个实战场景:用Subtitle Edit轻松搞定专业字幕制作

3大核心功能5个实战场景:用Subtitle Edit轻松搞定专业字幕制作 【免费下载链接】subtitleedit the subtitle editor :) 项目地址: https://gitcode.com/gh_mirrors/su/subtitleedit 如果你正在寻找一款功能强大、操作简单的字幕编辑工具,Subtitle…...

Subtitle Edit:实现专业级字幕制作的7大创新方法指南

Subtitle Edit:实现专业级字幕制作的7大创新方法指南 【免费下载链接】subtitleedit the subtitle editor :) 项目地址: https://gitcode.com/gh_mirrors/su/subtitleedit 在视频内容创作与传播领域,字幕不仅是辅助理解的工具,更是提升…...

在Windows上直接安装Android应用:APK-Installer完整使用指南

在Windows上直接安装Android应用:APK-Installer完整使用指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经想在Windows电脑上运行Android应用&…...

3步实现音频自由:QMCFLAC2MP3高效解密与跨平台应用指南

3步实现音频自由:QMCFLAC2MP3高效解密与跨平台应用指南 【免费下载链接】qmcflac2mp3 直接将qmcflac文件转换成mp3文件,突破QQ音乐的格式限制 项目地址: https://gitcode.com/gh_mirrors/qm/qmcflac2mp3 一、音乐收藏者的困境:当专有格…...

VRCT: 实现VRChat跨语言交流的实时翻译解决方案 | 全球玩家的无障碍社交工具

VRCT: 实现VRChat跨语言交流的实时翻译解决方案 | 全球玩家的无障碍社交工具 【免费下载链接】VRCT VRCT(VRChat Chatbox Translator & Transcription) 项目地址: https://gitcode.com/gh_mirrors/vr/VRCT 在全球化的虚拟社交平台VRChat中,语言障碍是否曾…...

校园网环境下树莓派与Windows直连SSH的实战指南

1. 为什么需要网线直连树莓派? 在校园网环境下使用树莓派时,很多同学都会遇到这样的困扰:宿舍里没有路由器,校园WiFi又需要复杂的认证,根本无法让树莓派联网。这时候,一根普通的网线就能解决大问题。 我第一…...

华为2288H V3服务器iBMC配置全攻略:从默认密码到ESXi安装一步到位

华为2288H V3服务器iBMC与ESXi部署实战指南 对于企业IT基础设施团队而言,华为2288H V3服务器的灵活配置与高效管理能力使其成为数据中心建设的理想选择。本文将深入解析从基础配置到虚拟化平台部署的全流程,特别针对iBMC智能管理系统和VMware ESXi安装提…...

HS2-HF_Patch深度解析:游戏模组生态系统的技术架构与实现原理

HS2-HF_Patch深度解析:游戏模组生态系统的技术架构与实现原理 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch HS2-HF_Patch作为Honey Select 2游戏的…...

mT5分类增强版中文-base效果惊艳:同一输入生成‘正式/口语/幽默’三风格文本示例

mT5分类增强版中文-base效果惊艳:同一输入生成‘正式/口语/幽默’三风格文本示例 1. 模型介绍:零样本学习的文本增强利器 mT5分类增强版中文-base是一个基于mT5架构的文本增强模型,专门针对中文场景进行了深度优化。这个模型最大的特点是采…...

OpenClaw成本优化方案:Qwen3.5-9B-AWQ-4bit自部署省下80%Token

OpenClaw成本优化方案:Qwen3.5-9B-AWQ-4bit自部署省下80%Token 1. 为什么需要关注OpenClaw的Token消耗 第一次用OpenClaw完成图片处理任务时,我的信用卡账单给我上了深刻的一课——单月API调用费用直接突破2000元。这个数字让我意识到:如果…...

Linux内核核心机制与开发实践详解

1. Linux内核概述与预备知识Linux内核作为操作系统的核心组件,承担着管理硬件资源、提供系统服务的关键角色。要深入理解Linux内核,需要具备以下基础知识储备:C语言能力:内核代码90%以上由C语言编写,需掌握指针操作、内…...

JavaSE从0到1-DAY7-内部类(i)

Java 内部类学习笔记(i) 一、为什么会有内部类? 核心作用 内部类是写在外部类里面的类,它的主要作用是: 逻辑封装:把只属于外部类的辅助功能封装起来,不暴露给外界访问权限:内部类可…...

Translumo完全指南:5分钟掌握实时屏幕翻译,打破语言障碍

Translumo完全指南:5分钟掌握实时屏幕翻译,打破语言障碍 【免费下载链接】Translumo Advanced real-time screen translator for games, hardcoded subtitles in videos, static text and etc. 项目地址: https://gitcode.com/gh_mirrors/tr/Translumo…...

Qt5.15.2在RK3588上的多媒体支持问题:如何正确配置GStreamer插件避免‘no service found‘错误

Qt5.15.2在RK3588上的多媒体支持问题:如何正确配置GStreamer插件避免no service found错误 在嵌入式Linux系统上部署Qt多媒体应用时,开发者经常会遇到各种依赖库和插件配置问题。特别是在RK3588这样的高性能ARM平台上,QtMultimedia模块与GStr…...

Whitlow/218 Linker如何革新抗体药物开发中的稳定性与生产难题?

一、抗体工程领域面临何种关键性技术瓶颈?抗体药物作为生物制药领域最具前景的治疗方向之一,在肿瘤、自身免疫疾病和传染病等重大疾病治疗中展现出卓越疗效。然而,在抗体药物研发过程中,两个关键技术难题始终制约着其进一步发展&a…...

忍者像素绘卷效果实测:32色感在移动端微信小程序的色彩还原精度

忍者像素绘卷效果实测:32色感在移动端微信小程序的色彩还原精度 1. 测试背景与目标 忍者像素绘卷是一款基于Z-Image-Turbo深度优化的图像生成工具,主打16-Bit复古游戏美学风格。本次测试聚焦于其在移动端微信小程序环境下的色彩还原能力,特…...

告别手动重启!用宝塔PM2管理器实现Node.js热更新(2023最新配置指南)

2023终极指南:用宝塔PM2打造Node.js热更新开发流水线 每次保存代码都要手动重启服务?还在为部署中断用户体验而头疼?作为经历过数百次深夜紧急部署的全栈开发者,我总结出一套零中断热更新方案。只需15分钟配置,让你的N…...