首页 > 编程语言 >你不知道的javascript 1.2理解作用域 (一)

你不知道的javascript 1.2理解作用域 (一)

时间:2022-12-13 19:44:27浏览次数:53  
标签:变量 1.2 作用域 javascript 编译器 引擎 声明 赋值

程序进行处理的参与者

1 引擎

从头到尾负责整个JavaScript程序的编译及执行过程

2 编译器

引擎的处理过程中的帮手之一,负责语法分析及代码生成(解析(parse)->transform(转换)->generate(生成))

3. 作用域

引擎的处理过程中的帮手之一,负责收集并维护由所有声明的标识符(变量)组成的一些列查询,并实施一套非常严格的规则,确定当前执行的代码对这些标识符的访问权限。

编译器首先会将这段程序分解成词法单元,然后将词法单元解析成一个树结构。但是当编译器开始进行代码生成时,它对这段程序的处理方式会和预期的有所不同。
1 遇到var a,编译器会询问作用域是否已经有一个该名称的变量存在于同一个作用域的集合中。如果是,编译器会忽略该声明,继续进行编译;否则它会要求作用域在当前作用域的集合中声明一个新的变量(强引用与弱引用)
2 接下来编译器会为引擎生成运行时所需要的代码,这些代码被用来处理a=2这个赋值操作、引擎运行时会首先询问作用域,在当前的作用域集合中是否存在一个叫做a的变量。如果是,引擎就会使用这个变量;如果否,引擎会继续查找该变量
如果引擎最终找到了a变量,就会将2赋值给它。否则引擎就会举手示意并抛出一个异常!
总结:变量的赋值操作会执行两个动作,实现编译会在当前作用域声明一个变量(如果之前没有声明过),然后在运行时引擎会在作用域中查找该变量,如果能够找到就会对它赋值。

标签:变量,1.2,作用域,javascript,编译器,引擎,声明,赋值
From: https://www.cnblogs.com/czh0316/p/16979790.html

相关文章

  • oel 7.9搭建oracle 11.2.0.4物理备库
    文档课题:oel7.9搭建oracle11.2.0.4物理备库.实验目标:主库已存在一个备库,搭建第二个备库.创建时间:2021/12/011、规划2、磁盘处理2.1、划分磁盘空间#fdisk/dev/sdb为meddoc......
  • JavaScript中比较字符串的4种方法
    严格平等要确定字符串是否相等,可以使用严格相等运算符。如果字符串不同,则返回,如果字符串相同,则返回===false trueconsts1='learn';consts2='today';console......
  • javascript如何获取对象的key和value
    1、获取key值获取对象所有key的方法,需要使用Object.keys(obj)方法,Object.keys(obj)方返回一个数组,这个数组包含obj对象中的所有key。其中obj就是你写的对象,具体使用方......
  • javascript中setInterval越来越快的问题解决方法
    vartimerfunctionrun(){ //clearInterval要放在方法开始,不然的话,下面的代码还没运行到clearInterval,又开始了循环了。if(timer){clearInter......
  • 教你用JavaScript实现实时字符计数器
    案例介绍欢迎来到我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,做一个实时字符计数器。用户在指定位置打字,程序实时显示字符数量。......
  • JavaScript奇淫技巧:用密码保护你的照片
    JavaScript奇淫技巧:密码保护的私密图片JavaScript奇淫技巧:图片压缩、图片加密本文将用JavaScript实现两个颇有技术含量的功能:图片压缩、图片加密。最终效果:可实现将任意图片......
  • 读书笔记(三)——11.26
    文章目录​​一、早冥读写跑​​​​二、《刻意练习》​​​​三、《人类简史》​​​​四、《活法》​​一、早冥读写跑阅读感悟游戏心态,不要让事情本身舒服了,你的情绪和......
  • javascript Promise
    Promise对象构造时需要一个参数,这个参数必须是一个函数。letprom=newPromise(function(resolve,reject){ console.log("Run"); //进行费时间的异步操作 ... /......
  • kubenetes crictl kubenetes 版本选择 kubenetes 1.24 之后 启用cri 是真坑
    Unfortunately,anerrorhasoccurred: timedoutwaitingfortheconditionThiserrorislikelycausedby: -Thekubeletisnotrunning -Thekubeletisunhealt......
  • Delphi 11.2应用体验报告
    Delphi11.2按个人预期发布了!官方下载地址:​​https://altd.embarcadero.com/download/radstudio/11.0/RADStudio_11_2_10937a.iso​​,安装过程:如果你从11.1安装,则是无缝升......