执行上下文是JavaScript代码运行时的环境,分为全局、函数和eval三种类型,每调用一个函数就会创建一个新的执行上下文并压入执行栈。其生命周期包含创建和执行两个阶段:创建阶段确定this、生成词法环境与变量环境;执行阶段进行变量赋值和代码执行。作用域链由词法环境构成,用于按定义位置从内向外查找变量,确保函数能访问外层作用域的变量,形成闭包机制。闭包使内部函数可持久访问外部函数的变量,即使外部函数已执行完毕,如counter示例中count被持续引用而未被销毁。理解执行上下文与作用域链有助于掌握变量查找机制和函数执行原理,提升代码逻辑清晰度与质量。

在 JavaScript 中,理解执行上下文和作用域链是掌握变量查找机制和函数执行原理的关键。每当 JavaScript 代码运行时,引擎会创建一个执行环境,这个环境就是“执行上下文”。而作用域链则是该上下文中用于查找变量的路径机制。
执行上下文是 JavaScript 引擎用来管理代码执行的一种内部机制。它并不是代码本身,而是代码运行时所处的环境。每一段可执行代码(全局代码、函数代码、eval 代码)都会对应一个执行上下文。
执行上下文分为三种类型:
JavaScript 是单线程语言,同一时间只能执行一个上下文,其他上下文会被放入执行栈(也叫调用栈)中排队。当前执行完毕后,控制权交还给上一层。
立即学习“Java免费学习笔记(深入)”;
每个执行上下文的创建和执行分为两个阶段:
1. 创建阶段在这个阶段,变量和函数已经被注册,但尚未赋值(var 变量为 undefined,let/const 处于暂时性死区)。
2. 执行阶段例如:
var a = 10;
function foo() {
var b = 20;
console.log(a); // 10
}
foo();
当 foo 被调用时,会创建新的函数执行上下文,进入创建阶段:this 绑定、变量环境记录 b,然后进入执行阶段赋值并输出 a。
作用域链是执行上下文的一部分,它是由一系列词法环境组成的链式结构,用于变量查找。它的核心原则是:从内向外逐层查找变量,直到全局上下文为止。
类似智能机器人程序,以聊天对话框的界面显示,通过输入问题、或点击交谈记录中的超链接进行查询,从而获取访客需要了解的资料等信息。系统自动保留用户访问信息及操作记录。后台有详细的设置和查询模块。适用领域:无人职守的客服系统自助问答系统智能机器人开发文档、资源管理系统……基本功能:设置对话界面的显示参数设置各类展示广告根据来访次数显示不同的欢迎词整合其他程序。
4
作用域链的形成基于函数定义时的位置,而不是调用位置(这就是词法作用域)。
举个例子:
var x = 'global';
function outer() {
var y = 'outer';
function inner() {
var z = 'inner';
console.log(x, y, z); // "global" "outer" "inner"
}
inner();
}
outer();
当 inner 函数执行时,其作用域链包含三个环境:
变量查找按此顺序进行。如果某变量在当前环境找不到,就向上一级查找,直到全局环境。若仍未找到,则抛出 ReferenceError。
闭包是指函数能够访问其定义时所在作用域的变量,即使外部函数已经执行完毕。这正是作用域链的体现。
看下面的例子:
function outer() {
var count = 0;
return function inner() {
count++;
console.log(count);
};
}
var counter = outer();
counter(); // 1
counter(); // 2
虽然 outer 已经执行结束,其执行上下文本应销毁,但由于 inner 函数引用了 outer 中的 count 变量,所以 outer 的词法环境仍然保留在内存中。inner 的作用域链保留了对 outer 环境的引用,从而实现了状态持久化。
基本上就这些。执行上下文决定了代码如何运行,作用域链决定了变量如何查找。理解它们有助于写出更清晰、不易出错的 JavaScript 代码,尤其是在处理嵌套函数和异步逻辑时。不复杂但容易忽略。
以上就是执行上下文详解_javascript作用域链的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号