首页 > 其他分享 >变量提升与暂时性死区

变量提升与暂时性死区

时间:2023-08-06 11:55:05浏览次数:36  
标签:me 变量 num 暂时性 提升 var 申明

1. 变量提升

使用var申明变量的时候,不管变量的申明写在哪里,最后都会被提升到顶端去。
因此,我们可以先使用变量,在申明变量,却不会报错,只会输出undefined。

console.log(num)  // undefined
var num = 1;

在函数中也是一样的,在函数内部申明的变量会被提升到函数作用域的顶端。

function getNum() {
  console.log(num);   // undefined
  var num = 1;
}

事实上,JS也是有编译阶段的,它和传统语言的区别在于,JS不会早早地把编译工作做完,而是一边编译一边执行。
在这个短暂的编译阶段里,JS 引擎会搜集所有的变量声明,并且提前让声明生效。至于剩下的语句,则需要等到执行阶段、等到执行到具体的某一句的时候才会生效。这就是变量提升背后的机制。

2. 暂时性死区

按理说下面这段代码会正常运行,因为运行到me = 'lee';的时候me已经申明了,但却报错了。

var me = 'icon';
{
  me = 'lee';
  let me;
}

image
这是因为 ES6 中有明确的规定:如果区块中存在 let 和 const 命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。假如我们尝试在声明前去使用这类变量,就会报错,这就是“暂时性死区”。
这时候去掉me = 'lee';就可以正常运行了。

标签:me,变量,num,暂时性,提升,var,申明
From: https://www.cnblogs.com/zwx1123/p/17609252.html

相关文章

  • 【JavaScript01】简介与声明变量
    前言JavaScript是Web的编程语言。所有现代的HTML页面都使用JavaScript。JavaScript简介JavaScript的学习分三个部分:1、核心(ECMAScript):JavaScript的核心,描述了语言的基本语法和数据类型。ECMAScript是一套标准,定义了一种语言的标准与具体实现无关。2、文档......
  • R语言随机搜索变量选择SSVS估计贝叶斯向量自回归(BVAR)模型|附代码数据
    原文链接:http://tecdat.cn/?p=9390原文出处:拓端数据部落公众号 最近我们被客户要求撰写关于贝叶斯向量自回归(BVAR)的研究报告,包括一些图形和统计输出。介绍向量自回归(VAR)模型的一般缺点是,估计系数的数量与滞后的数量成比例地增加。因此,随着滞后次数的增加,每个参数可用的信息......
  • JavaSE--变量
    一、变量1、字面量  1)在java语言中“数据”被称为字面量,例如10、1.23、true、‘a’、“abc”,以上这些数据在程序中被叫做字面量  2)字面量分为很多种类:整数型字面量、浮点型字面量、布尔型字面量、字符型字面量、字符串型字面量......  字符型一定是单个字符才能称为......
  • 从零开始,探索Python变量的奥秘!
    在Python这个充满魔力的编程世界中,变量是一门必须深入了解的基础知识。无论你是初学者还是有经验的开发者,掌握变量的基本语法对于编写优雅、高效的代码至关重要。本篇博客将带你从零开始,深入探索Python变量的奥秘,让你在编程之旅中游刃有余。变量是什么?在计算机编程中,变量是用于存储......
  • 用户体验设计:提升网站吸引力与用户满意度的秘诀
    导言:在竞争激烈的互联网时代,用户体验设计成为吸引用户和留住客户的重要因素。优秀的用户体验可以提高网站的可用性和吸引力,增加用户的满意度和忠诚度。本文将深入探讨用户体验设计的重要性、关键要素以及有效的设计秘诀,帮助企业打造令人印象深刻的用户体验,实现业务的持续增长。......
  • 【转载】C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
    【结论】一、在有些情况下,必须使用初始化列表。特别是const和引用数据成员被初始化时。二、从效率方面来说,对于内置类型或复合类型,差异不会太大,但对于非内置数据类型,差异还是很明显的【具体参考】C/C++通过初始化列表和构造函数内赋值初始化成员变量的区别_Zju_Jemery的博客-......
  • Python全局变量
    关于Python跨文件全局变量作用域的问题可以定义一个Global_var.py将所有的全局变量放进去,在其他模块导入;重点:在其他模块中使用importGlobal_var导入时,在函数内部使用Global_var.变量名即可直接修改全局变量,无需global修饰;但是使用fromGlobal_varimport*导入模块时必须要在......
  • 私有化部署企业IM即时通讯:提升效率、防止泄密、高效协同办公
    随着科技的飞速发展和智能手机的普及,即时通讯(IM)应用在我们的生活和工作中变得越来越重要。在企业中,IM已成为员工之间交流沟通的主要方式之一。然而,对于大多数企业来说,选择私有化部署企业IM即时通讯软件,而不是采用个人社交性IM办公,是一种更明智的选择。这篇文章将阐述几个原因,为什么......
  • 内容自动化如何提升您的营销
    如果您通过此页面上的链接购买商品,我们可能会从我们的联盟合作伙伴那里赚钱。内容自动化是使用软件定期创建、发布和分发内容的过程。它可以帮助您节省时间、覆盖更广泛的受众并提高内容质量。如果您希望节省时间、吸引更广泛的受众并提高内容质量,那么内容自动化是您的绝佳选择......
  • 第一节 变量与字符串
                                                  第一节  变量与字符串   1.变量不用类型定义直接赋值x=3name="小甲鱼"age='5'x=y=32.print()括号里可以用单引号,双引号输出字......