JavaScript中变量提升和时间死区现象,你能解释清楚吗?

2026-04-06 21:010阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1374个文字,预计阅读时间需要6分钟。

JavaScript中变量提升和时间死区现象,你能解释清楚吗?

前言+开始执行脚本时,脚本的第一步是编译代码,然后再次开始执行代码。此外,在编译优化方面来说,最开始时也不是全部代码都编译好的,而是在函数执行时,才会先编译,然后再执行。

JavaScript中变量提升和时间死区现象,你能解释清楚吗?

前言

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

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

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

变量提升

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

阅读全文

本文共计1374个文字,预计阅读时间需要6分钟。

JavaScript中变量提升和时间死区现象,你能解释清楚吗?

前言+开始执行脚本时,脚本的第一步是编译代码,然后再次开始执行代码。此外,在编译优化方面来说,最开始时也不是全部代码都编译好的,而是在函数执行时,才会先编译,然后再执行。

JavaScript中变量提升和时间死区现象,你能解释清楚吗?

前言

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

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

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

变量提升

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

阅读全文