欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > 什么是变量提升?(形象的比喻)

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

2025/5/9 10:36:23 来源:https://blog.csdn.net/lyz202121110634/article/details/147805787  浏览:    关键词:什么是变量提升?(形象的比喻)

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


​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:占位符禁止查看(报错),直到赋值完成。

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

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词