切换导航
简历
工具
演示
查询
导航菜单
服务端
30
前端
114
数据库
82
进阶开发
8
桌面程序
2
QA
15
软件使用
36
规范协议
5
操作系统
11
AI
0
复用资源
6
硬件
0
标签
面试题
笔试题
解决方法
术语和定义
计算机基础知识
C# 面试题
异常错误
待学习
外部链接
.NET Core SDK和运行时安装包
淘宝 NPM 镜像
查询网
Tables Generator线上表格转换工具
引用cdn在线脚本和样式
首页
QA
程序开发中“上下文”概念说明
[TOC] ## 1. 上下文(Context) 编程中的上下文指的是代码执行的环境、背景或者范围,它决定了某段代码可以访问哪些资源以及如何解释这段代码。 简单来说,上下文就是代码“生效的范围”。 **几个常见的上下文例子:** + 全局上下文 - 整个代码文件或模块都能访问的上下文环境。如在浏览器中,window对象表示全局上下文。 + 函数上下文 - 函数内部的上下文环境,函数内部可以访问函数的参数、局部变量等信息。 + 对象上下文 - 对象内部的上下文,对象方法可以访问该对象的属性、其他方法等。 + 词法上下文 - 内部函数访问外部函数变量的规则。 + 动态上下文 - execution context,函数调用时创建的上下文环境,例如它会创建一个上下文对象,存储上下文中的关键词(变量,函数声明),确定this的指向。 所以在编写代码时,要意识到代码执行的上下文,什么资源能访问,什么变量是有效范围。这决定了代码的语义和逻辑。 ### 1.1. 词法作用域(lexical scope) **定义:**内部函数访问外部函数变量的规则就是词法作用域 简单来说,就是在 JavaScript 中,内部函数可以访问外部函数中定义的变量,即使在外部函数执行完后,这种变量访问关系仍然有效 ```JS function outer() { var outerVar = 100; function inner() { console.log(outerVar); // 100 } inner(); } outer(); ``` 在这个例子中,inner() 函数可以访问outer() 函数中的 outerVar 变量,尽管在 inner() 执行时,outer() 已经执行完毕了。 这是因为 JavaScript 在 inner() 定义时就决定了它的词法作用域,与outer() 函数相关联,所以内部函数可以访问外部函数的变量,这种关系不会被外部函数的执行影响。 简而言之,JS 中函数的词法作用域在函数定义时就决定了,并且永久有效,这就是词法作用域规则。 ### 1.2. 执行上下文(execution context) **执行上下文:**指的是在JavaScript中,当一个函数被调用时,会为该函数创建一个执行上下文。执行上下文定义了函数执行时的环境 当JavaScript代码执行一段可执行代码(函数,代码块等)时,会做以下事情: + 创建一个执行上下文对象 + 确定该上下文中的关键词(变量、函数声明等) + 确定 this 的值 **代码解释:** ```JS function foo() { var a = 1; var bar = function() { console.log(a); } bar(); } foo(); // 当调用foo函数时,会创建一个执行上下文: // 1. foo执行上下文被创建,【存储】foo函数中的变量声明、函数声明等信息 // 2. 确定this指向,在foo中this指向window // 3. 当bar被调用时,又会创建一个bar函数的执行上下文,形成一个执行上下文栈 // 4. bar执行上下文可以通过作用域链访问到foo上下文中的a变量 ``` 所以执行上下文是函数执行时创建的环境,存储了函数可以访问的变量、函数声明等信息。它决定了函数中关键词和标识符的可见性与生命周期。 #### 1.2.1. 执行上下文流程 ***  *** **解释:** + 当函数被调用时,会触发执行上下文的创建 + 创建执行上下文对象,这个对象中包含了函数执行需要的所有状态信息,包括: - 作用域链,用于变量访问 - 变量对象,存储变量和函数声明 - this的指向 + 开始真正执行代码,这会修改变量对象的值,直到执行完成 + 最后函数执行完成,执行上下文从栈中弹出 所以执行上下文、在函数调用时被创建,存储了函数执行所需的一切信息,在函数执行结束时被销毁。它决定了函数中代码的具体执行过程。 ### 1.3. 词法上下文和执行上下文区别 + 词法上下文描述了变量和函数的可访问性,它在代码编写的时候就已经确定了。JavaScript采用词法作用域,内部函数可以访问外部函数定义的变量。 + 执行上下文描述了代码执行时的环境,包括变量、函数声明等信息。当代码执行时,会为函数创建执行上下文,并在函数调用时将其压入执行上下文栈。 词法上下文决定了变量的访问性,执行上下文决定了函数执行时的环境。 **主要区别:** + 词法上下文在编写时就确定,执行上下文在运行时创建 + 词法上下文决定了变量的可访问性,执行上下文包含变量对象、this等信息 + 词法上下文外的代码无法访问内部变量,执行上下文会通过作用域链访问 总之词法上下文影响着执行上下文的生成,它是执行上下文创建的依据
扫一扫手机看
点击排行
windows 文件资源管理器使用
Layui 弹窗open使用说明
SQL Server 中字符串函数使用
C# 使用QQ邮箱代理做邮件接收功能
SQL Server关于apply的两种形式cross apply 和 outer apply
ASP.NET MVC 模型的自定义验证
nvm安装及常用命令
SQL Server 中数据类型转换
SQL Server 中WITH AS短语的使用
IE浏览器下AJAX缓存问题导致数据不更新的解决办法
订阅号