浏览器工作原理学习(八)

news/2024/7/3 2:58:10

作用域

  • 全局作用域中的对象在代码中的任何地方都能访问,其生命周期伴随着页面的生命周期。
  • 函数作用域就是在函数内部定义的变量或者函数,并且定义的变量或函数只能在函数内部访问,函数执行结束后,函数内部定义的变量会被销毁。
  • 块级作用域就是使用一对大括号包裹的一段代码,比如函数、判断语句、循环语句甚至是单独的一个{}都会被是为一个块级作用域,JS在ES6之后引入块级作用域。

变量提升所带来的问题

  • 变量容易在不被察觉的情况下被覆盖掉:JS在执行上下文时,先使用函数执行上下文里面的变量。
  • 本应销毁的变量没有被销毁:函数内部的变量被全局提升,导致未被销毁。

ES6是如何解决变量提升带来的缺陷

  1. ES6引入let和const关键字,使JS拥有块级作用域。
  • let关键字声明的变量可以修改,const关键字声明的变量不可修改。两者都生成块级作用域。
  • 块级作用域可以把内部变量限制在作用域内部,而不会被变量提升到上级或全局的变量环境中。
  1. JS是如何支持块级作用域的
  • 在编译阶段,var声明的变量,会被存放到变量环境里面。
  • let 声明的变量会被存放到词法环境的一个单独的区域中
  • 在词法环境内部,维护了一个小型栈结构,栈底是函数最外层的变量,栈顶为块级作用域内部的变量(let 和 const 声明),当作用域执行完成后,从栈顶弹出。
  • 执行上下文时,先从词法环境的栈顶向下查询,如果未查找到,则去变量环境中查找。
  • 块级作用域时用过词法环境的栈结构来实现的。变量提升是通过环境变量来实现的。两者结合,JS引擎就能同时支持变量提升和块级作用域了。

http://www.niftyadmin.cn/n/2608630.html

相关文章

浏览器工作原理学习(九)

作用域链 什么是作用域链? 每个执行上下文的变量环境中,都包含了一个外部引用,用来指向外部的执行上下文,我们把外部引用称为outer。JS引在执行全局上下文中查找,这个查找的链条就是被称为作用域链。 什么是词法作用…

网页DIV+CSS布局和动画美化全程实例 (陈益材) 随书光盘

网站的建站技术近几年得到迅速的发展,网页的布局与特效动画技术层出不穷,网站建设已经从简单的技术支持时代衍变到现在的视觉美化时代。但如何使设计的网页高人一筹,达到让人过目不忘的境界,如何追求以最简单的特效让网页“亮”起…

浏览器工作原理学习(十)

this 在对象内部的方法中使用对象内部的属性是一个非常普遍的需求。但JS的作用域机制并不支持这一点,为此,JS高出了this机制。this 和作用域链是2套不同的系统。 什么是this? this是和执行上下文绑定的, 每个执行上下文中都有一…

linux下不同服务器间数据传输(rcp,scp,rsync,ftp,sftp,lftp,wget,curl)

rcp rcp不是一种安全的的传输文件的方式,rcp通过rsh(rsh见下面)来执行远程命令,要使用rcp必须经过一些配置,现在rcp已经被scp取代了,常用scp来进行文件传输。要使用rcp,需要具备以下条件&#x…

浏览器工作原理学习(十一)

语言类型 在使用前需要确认其变量数据类型的称为静态语言©,运行过程中需要检查数据类型的语言称为动态语言(js)。在赋值时,语言回进程隐式类型转换,这类语言被称为弱类型语言,不支持隐式类型转换额语言称为强类型语言。 JS数…

【跃迁之路】【423天】刻意练习系列182—SQL(2018.04.04)

(跃迁之路)专栏 叨叨两句 技术的精进不能只是简单的刷题,而应该是不断的“刻意”练习该系列改版后正式纳入【跃迁之路】专栏,持续更新刻意练习——MySQL 2018.04.02 题目描述 DROP TABLE IF EXISTS test1;CREATE TABLE test1 (id int(11) NOT NULL AUTO_…

浏览器工作原理学习(十二)

编译器和解释器 按语言的执行流程,可以把语言划分为编译型语言和解释型语言。编译型语言:在程序执行前,需要经过编译器的编译过程,并且编译之后会直接保留机器能读懂的二进制文件,这样每次运行程序时,都可以…

离线计算成本节省的神兵利器

摘要: 对于创业成长型的企业来说,离线计算已经必不可少了,通过离线计算我们可以生成复杂的业务报表,通过离线计算我们也能精确的算出用户画像。离线计算已经当今的企业中成为了不可或缺的存在。那么使用弹性计算能够对离线计算领域…