JS温故而知新之变量提升和时间死区-创新互联

前言

创新互联公司服务项目包括镶黄网站建设、镶黄网站制作、镶黄网页制作以及镶黄网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,镶黄网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到镶黄省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

开始执行脚本时,执行脚本的第一步是编译代码,然后再开始执行代码,如图

另外,在编译优化方面来说,最开始时也并不是全部编译好脚本,而是当函数执行时,才会先编译,再执行脚本,如图

  • 编译阶段:经历了词法分析,语法分析生成AST,以及代码生成。并且在此阶段,它只会扫描并且抽出环境中的声明变量,声明函数以便准备分配内存,所有的函数声明和变量声明都会被添加到名为Lexical Environment的JavaScript内部数据结构内的内存中。因此,它们可以在源代码中实际声明之前使用。但是,Javascript只会存储函数声明和变量声明在内存,并不会存储他们的值
  • 执行阶段:给变量x赋值,首先询问内存你这有变量x吗,如果有,则给变量x赋值,如果没有则创建变量x并且给它赋值。

变量提升


如下图,左边灰色块区域,是演示函数执行前的编译阶段,先抽出所有声明变量和声明函数,并进行内存分配。然后再开始执行代码,在执行第一行代码的时候,若是变量a存在于内存中,则直接给变量a赋值。而执行到第二行时,变量b并没有在内存中,则会创建变量b并给它赋值。

Lexical enviroment是一种包含标识符变量映射的数据结构

LexicalEnviroment = {
 Identifier: ,
 Indentifier: 
}

分享文章:JS温故而知新之变量提升和时间死区-创新互联
链接分享:http://csdahua.cn/article/dciscj.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流