日常妙招屋
白蓝主题五 · 清爽阅读
首页  > 网络监控

变量名 let 和 var 的区别命名:别再搞混了

写代码的时候,你有没有遇到过ref="/tag/144/" style="color:#479099;font-weight:bold;">变量莫名其妙变了值?或者在循环里定义的变量,跑到外面还能用?这很可能是因为你用了 var 而不是 let,它们看着差不多,其实差得挺远。

var 是老派做法,有点“太宽”

var 是 JavaScript 最早用来声明变量的方式。但它有个问题——作用域太大。用 var 声明的变量是函数作用域,也就是说,只要在一个函数里,不管你在哪声明的,它都能被访问到。

比如你在 if 语句里用 var 定义一个变量:

if (true) {
    var name = "张三";
}
console.log(name); // 输出:张三

明明是在 if 里面定义的,结果外面也能拿到。这就容易出问题,尤其在复杂的逻辑里,别人根本不知道这个变量到底该不该存在。

let 更讲规矩,块级作用域

let 是 ES6 加进来的新关键字,它的作用域是块级的。所谓块,就是一对大括号 {} 包起来的部分。用 let 声明的变量,只在当前这个块里有效。

还是上面的例子,换成 let:

if (true) {
    let name = "李四";
}
console.log(name); // 报错:name is not defined

这时候外面就拿不到 name 了,更安全,也更符合直觉。

变量提升也有区别

var 有变量提升,意思是你可以在声明之前使用它,虽然值是 undefined。

console.log(age); // 输出:undefined
var age = 25;

而 let 不允许这样。在声明之前使用 let 变量,会直接报错。

console.log(score); // 报错:Cannot access 'score' before initialization
let score = 90;

这其实是好事,避免了因为顺序写错导致的 bug。

命名习惯上也要注意

虽然 let 和 var 都能用来命名变量,但现代开发中,大家更推荐用 let(或 const)代替 var。尤其是在写监控脚本、数据处理逻辑时,变量太多、作用域混乱,很容易误改数据。

比如你在写一个网络请求监控的小脚本,统计失败次数:

for (let i = 0; i < requests.length; i++) {
    let req = requests[i];
    if (req.status === 500) {
        let failCount = i + 1;
        console.log(`第${failCount}次请求失败`);
    }
}
// 这里的 i、req、failCount 全部只在 for 循环内有效,不会污染外部

要是用 var,这些变量全都会跑到外面去,万一别的地方也用了 i,那就乱套了。

实际建议

现在写 JS,基本可以忘记 var 了。let 和 const 才是主流。let 用于会变化的变量,const 用于不变的。命名时保持清晰,比如用 camelCase,别用 $ 或 _ 开头搞神秘。

尤其是做前端监控、日志收集这类功能时,变量一多,作用域管不好,查问题能查到怀疑人生。从一开始就用 let,少走弯路。