JavaScript 变量
·
一、变量的基本概念
变量就像一个带标签的盒子,你可以把数据(数字、文字、对象等)放进盒子里,之后通过标签(变量名)就能找到并使用这些数据。在 JavaScript 中,变量是弱类型的(动态类型),意味着你不用提前声明盒子里装的是什么类型的数据,赋值时会自动确定。
二、变量的 3 种声明方式
JavaScript 有 3 种声明变量的关键字:var、let、const,其中let和const是 ES6(2015)新增的,也是现在的主流用法。
1. 完整代码示例(对比三种声明)
javascript
运行
// 1. var声明(ES5,存在作用域和提升问题,现在不推荐)
var age = 18;
var age = 20; // 可以重复声明,不会报错
console.log(age); // 输出:20
// 2. let声明(ES6,块级作用域,推荐用于需要修改的变量)
let name = "张三";
// let name = "李四"; // 重复声明会报错:Identifier 'name' has already been declared
name = "李四"; // 可以修改值,输出:李四
console.log(name);
// 3. const声明(ES6,块级作用域,用于不需要修改的常量)
const PI = 3.14159;
// PI = 3.14; // 修改值会报错:Assignment to constant variable.
// const PI; // 必须立即赋值,否则报错:Missing initializer in const declaration
console.log(PI); // 输出:3.14159
// 块级作用域示例(let/const生效,var不生效)
if (true) {
let a = 10;
var b = 20;
}
// console.log(a); // 报错:a is not defined(let的块级作用域)
console.log(b); // 输出:20(var是函数/全局作用域)
2. 关键区别总结
| 声明方式 | 作用域 | 重复声明 | 重新赋值 | 变量提升 | 必须初始化 |
|---|---|---|---|---|---|
| var | 函数 / 全局 | 允许 | 允许 | 完整提升 | 否 |
| let | 块级 | 不允许 | 允许 | 暂存死区 | 否 |
| const | 块级 | 不允许 | 不允许 | 暂存死区 | 是 |
三、变量命名规则(必须遵守)
- 合法字符:只能以字母、下划线
_、美元符号$开头,后续可以加数字(不能以数字开头)。 - 大小写敏感:
name和Name是两个不同的变量。 - 不能用关键字:比如
let、const、if、function等保留字不能作为变量名。 - 规范建议:
- 普通变量用小驼峰命名:
userName、ageList; - 常量用全大写 + 下划线:
MAX_SIZE、BASE_URL。
- 普通变量用小驼峰命名:
命名示例(正确 vs 错误)
javascript
运行
// 正确命名
let $price = 99;
let _count = 0;
let userAge = 25;
const MAX_NUM = 100;
// 错误命名
// let 123name = "test"; // 以数字开头
// let let = "abc"; // 使用关键字
// let user-name = "李四"; // 包含非法字符(-)
四、变量提升(新手易踩坑)
var声明的变量会 “提升” 到当前作用域顶部,但赋值不会提升:javascript
运行
console.log(num); // 输出:undefined(不是报错) var num = 10; // 等价于: // var num; // console.log(num); // num = 10;let/const不存在 “完整提升”,在声明前使用会触发 “暂存死区”,直接报错:javascript
运行
// console.log(num2); // 报错:Cannot access 'num2' before initialization let num2 = 20;
总结
- 声明优先选
let/const:let用于可变变量,const用于常量(推荐优先用const,避免意外修改),尽量不用var。 - 命名要合规:小驼峰 / 全大写规范,避开关键字和非法字符。
- 注意作用域:
let/const是块级作用域({}内生效),var是函数 / 全局作用域,新手容易因作用域出错。
更多推荐



所有评论(0)