什么是变量提升_let和var在此有何区别
发布时间 - 2026-01-11 00:00:00 点击率:次变量提升是JavaScript引擎在创建阶段将var和function声明提升至作用域顶部,但不提升赋值;let/const虽声明提升却不初始化,导致TDZ内访问报错。
变量提升到底是什么?
变量提升(Hoisting)不是“代码被移动了”,而是 JavaScript 引擎在执行前的「创建阶段」把声明收集到作用域顶部的行为。关键在
于:只提升 var 和 function 的声明,不提升赋值;而 let 和 const 虽然也“提升声明”,但不会初始化——这就引出了「暂时性死区」(TDZ)。
var 提升:能访问但值是 undefined
这是最常踩坑的地方:你以为没声明就不能用,结果它默默返回 undefined,还不会报错,导致逻辑出错却难定位。
console.log(a); // undefined(不报错) vara= 10;
- 引擎实际做了:
var a;提升到作用域顶部,初始值为undefined - 赋值
a = 10仍留在原位置,执行时才发生 - 在函数内、
if块里、循环中都一样——只要在同一个函数作用域,就可提前读取
let 提升:一碰就报错的“禁区”
let 变量在声明语句执行前处于「暂时性死区」(TDZ),任何读写操作都会触发 ReferenceError。这不是 bug,是设计来强制你写更安全代码的机制。
console.log(b); // ReferenceError: Cannot access 'b' before initialization letb= 20;
- 声明确实被提升了(否则语法解析就会失败),但引擎拒绝让你在
let b = ...执行前触碰它 - TDZ 范围从块开头开始,直到声明语句执行完毕(包括
for (let i...)循环头部) - 常见误判:“let 没有提升”——错。它有提升,只是不初始化,且严格限制访问时机
为什么这个区别在真实项目里要命?
很多线上 bug 来自对提升行为的误判,尤其在条件分支、模块加载顺序、或与 typeof 配合时:
-
var下的typeof x永远不会报错(返回"undefined"),容易掩盖未定义问题 -
let下的typeof x在 TDZ 内直接报错,反而暴露了依赖顺序问题 - ES6+ 模块中,顶层
let声明不会挂载到window,而var会——跨脚本调试时变量“突然消失”往往源于此 - Vue/React 组件中若用
var声明响应式数据,可能因提升导致初始化时机错乱;let则让作用域和生命周期更可控
真正要注意的不是“记住了区别”,而是:只要没显式写 var,就别假设变量能在声明前安全使用——哪怕它看起来“应该存在”。
# vue
# react
# javascript
# es6
# java
# access
# win
# 区别
# 作用域
# 为什么
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
如何在宝塔面板中修改默认建站目录?
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
教学论文网站制作软件有哪些,写论文用什么软件
?
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
如何在阿里云虚拟服务器快速搭建网站?
轻松掌握MySQL函数中的last_insert_id()
Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】
Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】
,南京靠谱的征婚网站?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
如何快速重置建站主机并恢复默认配置?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
如何快速配置高效服务器建站软件?
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
javascript中闭包概念与用法深入理解
Laravel怎么使用Intervention Image库处理图片上传和缩放
利用 Google AI 进行 YouTube 视频 SEO 描述优化
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
node.js报错:Cannot find module 'ejs'的解决办法
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
浅谈Javascript中的Label语句
无锡营销型网站制作公司,无锡网选车牌流程?
如何快速搭建高效WAP手机网站?
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
Android实现代码画虚线边框背景效果
如何在云主机上快速搭建网站?
打造顶配客厅影院,这份100寸电视推荐名单请查收
jquery插件bootstrapValidator表单验证详解
bing浏览器学术搜索入口_bing学术文献检索地址
WEB开发之注册页面验证码倒计时代码的实现
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信
如何用VPS主机快速搭建个人网站?
活动邀请函制作网站有哪些,活动邀请函文案?
Laravel如何使用withoutEvents方法临时禁用模型事件
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
如何用低价快速搭建高质量网站?
如何用IIS7快速搭建并优化网站站点?
Laravel如何为API编写文档_Laravel API文档生成与维护方法
Python面向对象测试方法_mock解析【教程】
如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】
个人网站制作流程图片大全,个人网站如何注销?

