当前位置: 首页 > news >正文

变量环境、变量提升和暂时性死区

JavaScript中的提升

在JavaScript中,“Hoisting”(提升)是一种特性,它将变量和函数的声明移动到作用域的顶部。这意味着可以在声明之前使用这些变量和函数,而不会报错。
当JavaScript代码执行时,会经过两个阶段:编译阶段和执行阶段。在编译阶段,JavaScript引擎会先处理所有变量和函数的声明,并将它们提升到作用域的顶部。然后,在执行阶段,代码按照顺序执行。
例如,考虑以下代码片段:

console.log(x); // undefined
var x = 5;

在这个例子中,变量x的声明和赋值语句是分开的。在编译阶段,变量x的声明被提升到作用域的顶部,所以在第一行的console.log语句中,x的值是undefined。然后,在执行阶段,变量x被赋值为5。
同样,函数的声明也会被提升。例如:

sayHello();function sayHello() {console.log("Hello!");
}

在这个例子中,函数sayHello的声明被提升到作用域的顶部。所以即使在函数声明之前调用sayHello函数,也不会报错。
需要注意的是,只有声明会被提升,而不是赋值或函数的实际定义。因此,在使用变量或函数之前,仍然需要先进行声明。
总之,Hoisting是JavaScript中的一种特性,可以让我们在声明之前使用变量和函数。但是需要理解它的原理和限制,以避免出现意外的行为。

在这里插入图片描述

Depends if using var or let/const:如果使用 var 关键字声明变量,变量会被提升到其作用域的顶部。这意味着变量的声明会在代码执行之前进行处理,但是变量的赋值操作会保留在原来的位置。这可能导致一些意想不到的结果,因为变量可以在其实际声明之前被访问到,但是其值为 undefined。
如果使用 let 或 const 关键字声明变量,变量不会被提升。它们只能在其实际声明之后才能被访问。这种行为被称为暂时死区(TDZ),在 TDZ 中,如果尝试访问变量,JavaScript 引擎会抛出一个错误。
所以,根据使用的关键字不同,变量环境和提升的行为也会有所不同。

暂时死区,let和const

暂时死区(TDZ)是指在 let 和 const 声明的变量在其声明之前无法被访问的特性。在 TDZ 中,如果在变量声明之前尝试访问该变量,JavaScript 引擎会抛出一个错误。这是为了强制开发者遵循最佳实践,避免在变量未初始化之前使用它们。
let 和 const 是 ES6 引入的新的声明变量的关键字。它们与 var 关键字的主要区别是,let 和 const 声明的变量具有块级作用域,并且不存在变量提升的问题。
使用 let 声明的变量可以被重新赋值,而使用 const 声明的变量则是一个常量,其值在声明后不能被修改。
这些特性使得 let 和 const 更加安全和可靠,同时也更符合现代 JavaScript 开发的最佳实践。
使它更容易避免和捕捉错误:在声明之前访问变量是不好的做法,应该避免;
在这里插入图片描述

http://www.lryc.cn/news/222885.html

相关文章:

  • yolov8+多算法多目标追踪+实例分割+目标检测+姿态估计(代码+教程)
  • 【神经网络】【GoogleNet】
  • 网络安全深入学习第八课——正向代理(工具:ReGeorg)
  • Jmeter全流程性能测试实战
  • Python算法例8 将整数A转换为B
  • 一个基于百度飞桨封装的.NET版本OCR工具类库 - PaddleOCRSharp
  • 在 CelebA 数据集上训练的 PyTorch 中的基本变分自动编码器
  • 利用Ansible实现批量Linux服务器安全配置
  • 读书笔记:彼得·德鲁克《认识管理》第8章 战略规划:企业家技能
  • HarmonyOS应用开发-视频播放器与弹窗
  • java中对象的引用是什么?
  • jenkins插件迁移
  • RK356X Android13.0 HDMI和喇叭同时出声音
  • vue sass-loader,webpack安装卸载操作命令
  • nacos应用——占用内存过多问题解决(JVM调优初步)
  • 大漠插件(二、Qt使用插件时注意事项)
  • CSS 浮动
  • 基于STM32+华为云IOT设计的火灾感知系统
  • 算法通关村第八关|白银|二叉树的深度和高度问题【持续更新】
  • cmake 之add_definitions使用误区
  • Leetcode—515.在每个树行中找最大值【中等】
  • 安防监控系统EasyCVR平台设备通道绑定AI算法的功能设计与开发实现
  • element 弹窗浏览器后退-遮照层还存在问题 以及跟vue keep-alive冲突
  • C++(Qt)软件调试---自动注册AeDebug(17)
  • 云原生周刊:Gateway API 1.0.0 发布 | 2023.11.6
  • Java2 - 数据结构
  • 精解括号匹配问题与极致栈设计:揭开最大栈和最小栈的奥秘
  • 云存储/视频监控管理平台EasyCVR,使用sqlite数据库出现卡顿该如何优化?
  • 实战!工作中常用的设计模式
  • MySQL进阶_1.逻辑架构和SQL执行流程