写代码时,变量声明是每天都会碰到的事。尤其是在搭建网络服务或处理前后端交互时,选对变量声明关键词不仅能避免bug,还能让代码更清晰、更高效。
var、let 和 const 的选择不是小事
很多人刚开始写JavaScript时只用 var,后来发现变量提升和作用域问题让人头疼。比如在一个for循环里用 var 声明变量,结果回调函数拿到的总是最后一个值。
for (var i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 100);
}
// 输出三次 3,而不是 0、1、2
换成 let 就解决了这个问题,因为 let 是块级作用域。
for (let i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 100);
}
// 正确输出 0、1、2
const 更适合多数场景
在网络请求处理中,我们经常定义配置项或接口地址。这些值一旦设定就不该被修改。这时候用 const 比 let 更合适,既防止误改,也向其他开发者传递了意图。
const API_BASE_URL = 'https://api.example.com';
const HEADERS = { 'Content-Type': 'application/json' };
即使对象本身可变,用 const 声明也能保证引用不变,这是很多团队约定的最佳实践。
服务端代码里的变量声明习惯
Node.js 写后端服务时,模块导出常配合 const 使用。比如一个路由文件:
const express = require('express');
const router = express.Router();
const users = require('../controllers/users');
router.get('/list', users.getList);
module.exports = router;
这里的依赖和实例都用 const,逻辑清楚,也不会被意外重赋值。
前端框架中的常见模式
在 React 组件中,函数组件内部的状态通常用 const 接收,哪怕它会变化。因为 useState 返回的是一个不会变的引用。
function Profile() {
const [name, setName] = useState('');
const handleSubmit = () => { ... };
return <input value={name} onChange={(e) => setName(e.target.value)} />;
}
这里 name 和 setName 都用 const 声明,虽然 name 会变,但解构出来的这两个标识符本身不会重新赋值。
变量声明关键词不只是语法选择,它反映了你对数据流动和生命周期的理解。在网络架构相关的代码中,合理使用 let 和 const,能减少副作用,提升协作效率。