ES6变量黑话指南:从"渣男"var到"钢铁直男"const的进化史

一、ES6:JavaScript的成年礼

如果把JavaScript比作一个程序员,那ES6就是它去民政局把身份证年龄从"5"改成"18"的重要时刻。2015年这场名为ECMAScript 2015的"成人礼",让JS终于拥有了现代编程语言的标配装备:

  • 箭头函数(让this不再像女朋友的心思一样难猜)
  • 解构赋值(比拆快递还爽的数据拆包体验)
  • class语法(假装自己是Java的cosplay道具)
  • 模块化系统(代码终于不用挤在同一个文件里抢厕所)

但今天我们要重点聊聊变量界的三位顶流------let、const和他们那个名声不太好的前辈var。


二、var:编程界的"世纪渣男"

1. 作用域迷惑行为

用var声明变量就像在电梯里放屁:

javascript 复制代码
function elevator() {
    if(true) {
        var secret = "猜猜我在哪";
    }
    console.log(secret); // 居然能输出!就像屁味弥漫整个电梯
}

这个老六永远在函数作用域 里搞事情,完全无视if/for等代码块的边界,堪称变量界的"中央空调"。

2. 变量提升的鬼畜操作

javascript 复制代码
console.log(girlfriend); // 输出undefined而不是报错!
var girlfriend = "不存在的";

这种"先上车后补票"的行为,就像在简历上写"精通量子物理",等入职了才开始看《时间简史》。JS引擎会把var声明悄悄提到作用域顶端,但赋值留在原地。

3. 重复声明的海王本色

javascript 复制代码
var salary = 3000;
var salary = 30000; // HR:你上个月的工资条是P的?

这种随意覆盖的特性,让代码维护者想给前任var寄刀片。


三、let:有原则的暖男

1. 块级作用域:自带结界

javascript 复制代码
{
    let wallet = 200;
    console.log(wallet); // 正常输出
}
console.log(wallet); // 报错!钱包离开代码块立即消失

这像极了当代年轻人的"月光结界"------工资只在发薪日所在周有效。

2. 暂时性死区:拒绝暧昧

javascript 复制代码
console.log(bonus); // 报错!
let bonus = "老板画的饼";

在声明之前的区域称为"暂时性死区",比女朋友查手机还严格,杜绝任何暧昧操作。

3. for循环的正确打开方式

javascript 复制代码
for(let i=0; i<3; i++){
    setTimeout(()=>console.log(i), 100); // 输出0,1,2
}

用let时每个i都有自己的独立包间,而var就像把i扔进春运火车车厢,最后所有人都挤在同一个值里。


四、const:钢铁直男的倔强

1. 基本类型:焊死车门

javascript 复制代码
const PI = 3.14;
PI = 3.1415926; // 报错!比数学老师还严格

声明时必须立即赋值,后续修改直接触发红色警报。

2. 复杂类型:防君子不防小人

javascript 复制代码
const girlfriend = {
    name: '初音未来'
};
girlfriend.name = '洛天依'; // 居然可以!

这就像给你的对象加上"防偷家"结界:不能换人,但允许整容(修改属性)。要用Object.freeze()才能彻底锁死。

3. 命名艺术的仪式感

javascript 复制代码
const MAX_AGE = 150; // 全大写+下划线,赛博朋克の浪漫
const SECRET_KEY = '程序员防脱发指南';

大写常量就像程序员的摩斯密码,看到就知道是神圣不可侵犯的领域。


五、变量三剑客使用手册

关键字 适用场景 危险操作
var 写上古代码/故意制造bug/训练新人抗压能力 在循环里声明变量
let 循环计数器/需要修改的变量 在同一个作用域重复声明
const 配置项/函数表达式/引入模块 给对象换"皮囊"(重新赋值)

六、当代变量生存法则

  1. const优先原则:像守护工资卡密码一样守护常量
  2. let次之策略:需要修改的变量用let,像给程序装可变色车窗
  3. var考古模式:除非维护祖传代码,否则当作博物馆展品
  4. 作用域最小化:变量活动范围要像程序员社交圈一样精简

下次写代码时,不妨把变量声明当作给不同角色分配通行证:const是VIP终身会员卡,let是限时通行证,而var...建议直接送进变量历史博物馆。

相关推荐
小码哥_常3 小时前
一套自己部署的 IM,客户端是同一份 Flutter
前端·后端
蜗牛攻城狮5 小时前
微前端四大方案选型对比与最佳实践:qiankun、micro-app、wujie、Module Federation
前端·微前端·qiankun·前端架构·micro-app·wujie
她说可以呀6 小时前
Vue插槽
前端·javascript·vue.js
qq_448011166 小时前
Vue + Jinja2两套模版与法冲突造成undefinedError
前端·javascript·vue.js
aixingpan7 小时前
aixingpan.cn API开发文档:前端查询夏令时和时区接口指南
前端·php
Yuzhiyuxia7 小时前
【AI Agent面试系列】AI Agent记忆机制知识点1
人工智能·面试·职场和发展
2601_958352907 小时前
23.5×19mm 换掉一整条音频链?|A-68 集成了什么:ADC / DAC / 24.576MHz 时钟 / AEC / 波束降噪,主控仅需 6 根线
前端·音视频·ai降噪·回声消除·语音模块
志尊宝8 小时前
AI原生前端开发(039):AI辅助的Nuxt 4全栈开发
前端·vue.js·ai-native
FRing039 小时前
JavaScript入门到精通三十二(深拷贝、浅拷贝、递归函数)
开发语言·前端·javascript
excel9 小时前
双 Token 与前端使用 Crypto 公私钥鉴权换 Token,哪种方案更好?
前端·后端