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

什么是变量提升?(形象的比喻)

当然!可以用几个生活中的比喻来形象地解释变量提升:


​1. 书架的占位符​
想象你有一个书架,但还没放书。
• 变量提升(var):

你先在书架上贴了一个标签(比如写“我的书”),但暂时没放书。别人看到标签会问:“这里有什么书?”你回答:“还没有书(undefined)。”
等你后来放了一本书(赋值),别人才能拿到。

 

javascript

复制

console.log(我的书); // 输出 "undefined"(标签存在,但没书)
var 我的书 = "JavaScript指南"; 

let/const的暂时性死区:

你同样贴了标签,但告诉别人:“这里还没准备好,别碰!”(报错)。直到你放书后,别人才能看。

 

javascript

复制

console.log(我的书); // 报错:"标签存在,但禁止访问!"
let 我的书 = "JavaScript指南";

​2. 建筑工地的水泥地基​
盖楼时,先打地基(声明变量),但还没建楼层(赋值)。
var

地基已经打好,但楼板还没铺。你踩上去会掉下去(得到undefined)。
let/const

地基打了,但围了警戒线(暂时性死区)。你提前踩进去会摔跤(报错)。

 

javascript

复制

console.log(楼层); // 掉下去(undefined)
var 楼层 = 3; console.log(楼层); // 摔跤(报错)
let 楼层 = 3;

​3. 行李箱的打包顺序​
你整理行李时:
var

先写了个行李标签(声明变量),但包里还没装东西。别人打开行李箱时看到标签,但里面是空的(undefined)。
let/const

标签贴了,但强行打开行李箱会锁住(报错)。必须等装好东西(赋值)才能查看。

 

javascript

复制

console.log(牙刷); // 空标签(undefined)
var 牙刷 = "软毛"; console.log(牙刷); // 锁住行李箱(报错)
let 牙刷 = "软毛";

​4. 函数声明像“现成的快递”​
函数声明会被整体提升,就像网购了一件商品,直接送到你家(可以直接用):

 

javascript

复制

快递(); // 收到包裹,直接拆开用
function 快递() { console.log("商品到了!"); 
}

而函数表达式(如箭头函数)像“需要组装的家具”:

 

javascript

复制

快递(); // 报错:“零件还没到!”
var 快递 = () => { console.log("商品到了!"); 
};

​总结比喻​
• 变量提升:像“占位符”或“未完成的快递”,声明存在但内容未就绪。

var:占位符允许你查看(得到undefined)。

let/const:占位符禁止查看(报错),直到赋值完成。

• 函数声明:像“现成的礼物”,直接可用。

通过这些比喻,是不是更容易理解变量提升的“时间差”和不同声明方式的区别? 😊

http://www.xdnf.cn/news/4719.html

相关文章:

  • 【AI入门】CherryStudio入门4:创建知识库,对接思源笔记
  • Spring Boot 实现验证码生成与校验:从零开始构建安全登录系统
  • Linux Shell编程之条件语句
  • Jquery ajax 提交序列化或JSON数据到后台
  • 前端缓存踩坑指南:如何优雅地解决浏览器缓存问题?
  • CKESC STONE 80A-MC 电调的全场景可靠性技术测评
  • 从零打造个人博客静态页面与TodoList应用:前端开发实战指南
  • Maven
  • AI CUBE 使用指南 目标检测格式范例 AI cube 报错数据集不合规范,请清洗数据集
  • 在Hugging Face网站像Github一样克隆repository到本地的具体步骤
  • 【数据结构】——链表OJ(下)
  • 丝路传说手游:职业选择与高难度BOSS突破指南
  • 视频编解码学习8之视频历史
  • hprof文件,java虚拟机堆转储文件,Dump文件
  • 使用adb设置wifi相关
  • AI Agent开发之门:微软官方课程全面解析
  • R1-Searcher:用强化学习解锁大语言模型检索新能力!
  • 计算机体系架构-----设计模式:状态模式(从程序员加班问题切入)
  • SpringBoot中使用MCP和通义千问来处理和分析数据-连接本地数据库并生成实体类
  • 只出现一次的数字(暴力、哈希查重、异或运算)
  • Python基于Django和MySQL实现突发公共卫生事件舆情分析系统(有大屏功能)
  • 【AI论文】FlexiAct:在异构场景中实现灵活的动作控制
  • 线程池的核心参数和线程创建方式,线程和进程
  • rust程序静态编译的两种方法总结
  • 手势、鼠标滑动实现界面切换
  • 介绍Unity中的Dictionary
  • npm包之serve-favicon
  • flow-matching 之学习matcha-tts cosyvoice
  • 集团云解决方案:集团企业IT基础架构的降本增效利器
  • RAG技术在测试用例生成中的应用