千家信息网

JavaScript块级作用域的实现原理是什么

发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,这篇文章主要讲解了"JavaScript块级作用域的实现原理是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"JavaScript块级作用域的实现原
千家信息网最后更新 2025年02月23日JavaScript块级作用域的实现原理是什么

这篇文章主要讲解了"JavaScript块级作用域的实现原理是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"JavaScript块级作用域的实现原理是什么"吧!

作用域与执行上下文

很多人觉得作用域与执行上下文是一个概念,这种想法是完全错误的!

作用域

作用域在函数声明时就已经确定了,作用域是据名称来查找变量的一套规则,也就是确定了当前执行代码对变量的访问权限。JavaScript一共支持三种类型的作用域,它们分别是:全局作用域、函数作用域、块级作用域。

执行上下文

执行上下文是js引擎从解释到运行中间预编译时对执行做的准备工作,创建了当前区域的执行环境,这个执行环境就是执行上下文。

执行栈

调用栈用来装js代码中的各种执行上下文,是js引擎追踪函数执行的一个机制。

以下面的代码为例:

console.log(1);function pFn() {    console.log(2);    (function cFn() {        console.log(3);    }());    console.log(4);}pFn();console.log(5);//输出:1 2 3 4 5

先有全局环境下的执行上下文,调用pFn后将函数环境pFn的执行上下文压入栈中,由于pFn中执行了cFn函数,所以继续压入cFn函数的执行上下文,执行完毕后依次出栈。

全局上下文只有应用程序退出前才会被销毁,比如关闭网页或者退出浏览器

javascript 是如何支持块级作用域的

我们知道在js中由于初始设计的不规范,用var关键字定义变量会导致变量提升等一系列问题,但为了保持兼容性,我们也不得不对var声明变量这种方式保留支持,那么:JavaScript是如何做到既要支持变量提升,又要支持块级作用域的呢?

我们以下面这段代码为例:

function foo() {   var a = 1;   let b = 2;   {   let b = 3;   var c = 4;   let d = 5;   console.log(a);   console.log(b);   }   console.log(b);   console.log(c);   console.log(d);}

首先函数内部通过var声明的变量被存放到变量环境中,通过let声明的变量在预编译阶段被存放到词法环境中,当然在函数体内部块作用域中let声明的变量并没有被存放到词法环境中。

继续执行代码,当执行到代码块里面时,变量环境中的a的值已经被设置为1,词法环境中b的值已经被设置成了2,注意用let声明的变量b和d此时不是underfined而是uninitialized未初始化

最后当函数体内块作用域执行结束之后,其内部变量就会从词法环境的栈顶弹出

感谢各位的阅读,以上就是"JavaScript块级作用域的实现原理是什么"的内容了,经过本文的学习后,相信大家对JavaScript块级作用域的实现原理是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

作用 变量 上下 上下文 环境 函数 代码 支持 原理 词法 全局 学习 内容 就是 引擎 问题 编译 不对 也就是 关键 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 星环展示数据库链接 软件开发产品经理考核 企业软件开发服务介绍 pks系统服务器的自我介绍 依赖 数据库 中国网络安全证书 重邮数据库博士真题 服务器救援系统没反应 威海联想服务器哪个系列好 网站数据库安全问题有哪些 一列数据加到另一列数据库 系统转数据库 网络安全设置为开放 邮件服务器的安全性 德州森途网络技术有限公司 毕业设计软件开发本科 大话西游沧州府什么时候开服务器 新建网络安全实训室的立项报告 灵寿互联网软件开发设计质量保障 刘建上海软件开发 网络安全设计的背景 临沂新商网络技术怎么样 昆明学软件开发的五年制大专官网 长沙网络技术开发公司招聘 河南省网络安全素养教育基地 宝鸡市高新医院数据库管理 idea动态查询数据库数据 嘉兴网络安全专业人员需求 sql 数据库连接字符串 天使之战服务器开服时间
0