JavaScript提升 – 移动和停留什么

javascript提升 - 移动和停留什么

JavaScript提升机制如同舞台搭建,在代码执行前(“创建阶段”),所有声明会被移动到其作用域顶部。这就好比舞台工作人员在幕布升起前将道具摆放到位。需要注意的是,只有声明被移动,初始化操作则保留在原位。

根据ECMAScript规范,此行为是JavaScript在创建阶段创建“词法环境”的一部分。简单来说,JavaScript会在运行代码前对其进行“预扫描”。

var 提升:

console.log(x); // 输出: undefinedvar x = 5;console.log(x); // 输出: 5

var声明的变量x被提升到作用域顶部,但x = 5的初始化操作未被提升。因此,第一次console.log(x)输出undefined,而非报错,因为变量x存在,但尚未赋值。

立即学习“Java免费学习笔记(深入)”;

let 和 const 提升及暂时性死区 (TDZ):

console.log(y); // 抛出错误: ReferenceError: Cannot access 'y' before initializationlet y = 10;console.log(y); // 输出: 10

let和const声明的变量也会被提升,但它们被放置在暂时性死区 (TDZ) 中,直到初始化的那一行代码被执行。在初始化之前访问let或const变量会导致ReferenceError错误。这与var不同,var在类似情况下会返回undefined。

TDZ 意味着在初始化之前访问const声明的变量也会报错。这与var不同,var在类似情况下会返回undefined。ECMAScript规范称此行为为“暂时性死区语义”,简单来说,就是JavaScript防止我们在变量初始化之前访问它。

提客AI提词器 提客AI提词器

「直播、录课」智能AI提词,搭配抖音直播伴侣、腾讯会议、钉钉、飞书、录课等软件等任意软件。

提客AI提词器 64 查看详情 提客AI提词器

更复杂的例子:

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提升 – 移动和停留什么的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/371334.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
NDK–so插件化原理,hook技术实现andfix热修复
上一篇 2025年11月6日 07:44:55
贝耐特光学获数千万元A+轮融资,用于推动LCoS产品的规模化部署
下一篇 2025年11月6日 07:45:01

相关推荐

发表回复

登录后才能评论
关注微信