JavaScript提升 - 移动和停留什么
时间:2025-01-30 09:28:09 272浏览 收藏
偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《JavaScript提升 - 移动和停留什么》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!
JavaScript提升机制如同舞台搭建,在代码执行前(“创建阶段”),所有声明会被移动到其作用域顶部。这就好比舞台工作人员在幕布升起前将道具摆放到位。需要注意的是,只有声明被移动,初始化操作则保留在原位。
根据ECMAScript规范,此行为是JavaScript在创建阶段创建“词法环境”的一部分。简单来说,JavaScript会在运行代码前对其进行“预扫描”。
var
提升:
console.log(x); // 输出: undefined
var x = 5;
console.log(x); // 输出: 5
var
声明的变量x
被提升到作用域顶部,但x = 5
的初始化操作未被提升。因此,第一次console.log(x)
输出undefined
,而非报错,因为变量x
存在,但尚未赋值。
let
和 const
提升及暂时性死区 (TDZ):
console.log(y); // 抛出错误: ReferenceError: Cannot access 'y' before initialization
let y = 10;
console.log(y); // 输出: 10
let
和const
声明的变量也会被提升,但它们被放置在暂时性死区 (TDZ) 中,直到初始化的那一行代码被执行。在初始化之前访问let
或const
变量会导致ReferenceError
错误。这与var
不同,var
在类似情况下会返回undefined
。
TDZ 意味着在初始化之前访问const
声明的变量也会报错。这与var
不同,var
在类似情况下会返回undefined
。ECMAScript规范称此行为为“暂时性死区语义”,简单来说,就是JavaScript防止我们在变量初始化之前访问它。
更复杂的例子:
function setUpEventHandler() {
handleClick(); // 可执行!
const config = {
debug: true,
};
function handleClick() {
if (config?.debug) {
// undefined!
console.log("debug mode");
}
}
}
setUpEventHandler();
函数声明handleClick
被提升,因此可以提前调用。但config
对象则没有被提升,所以handleClick
内部访问config
时,config
尚未被初始化,导致config.debug
为undefined
。
类提升:
类的提升机制与函数不同。
const dog = new Animal(); // 抛出错误!
class Animal {
constructor() {
this.type = "mammal";
}
}
类声明在初始化之前无法访问,它们一直处于TDZ,直到其定义被评估。这意味着在声明之前无法使用类。
总结: 记住,虽然声明被提升到顶部,但初始化操作仍然保留在原位。
今天关于《JavaScript提升 - 移动和停留什么》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
480 收藏
-
418 收藏
-
188 收藏
-
271 收藏
-
437 收藏
-
445 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 507次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习