第2章:基础类型与变量
变量声明(let, const, var)
在 TypeScript 中,变量声明是构建程序的基础。TypeScript 支持 JavaScript 的三种变量声明方式:var、let 和 const,但每种方式的行为和适用场景有所不同。本节将详细介绍它们的区别以及最佳实践。
1. var 声明
var 是 JavaScript 早期的变量声明方式,具有以下特点:
- 函数作用域:
var声明的变量在函数内部有效,如果在函数外部声明,则成为全局变量。 - 变量提升:
var声明的变量会被提升到函数或全局作用域的顶部,可以在声明之前访问(值为undefined)。 - 可重复声明:同一个作用域内可以多次声明同名变量。
function exampleVar() {
console.log(x); // 输出 undefined(变量提升)
var x = 10;
if (true) {
var x = 20; // 覆盖外层的 x
}
console.log(x); // 输出 20
}
注意:
var容易导致变量污染和逻辑错误,现代 TypeScript/JavaScript 开发中不建议使用。
2. let 声明
let 是 ES6 引入的块级作用域变量声明方式:
- 块级作用域:
let声明的变量仅在当前代码块(如{}、if、for等)内有效。 - 无变量提升:必须先声明后使用,否则会报错。
- 不可重复声明:同一作用域内不能重复声明同名变量。
function exampleLet() {
let y = 10;
if (true) {
let y = 20; // 与外层的 y 无关
console.log(y); // 输出 20
}
console.log(y); // 输出 10
}
最佳实践:优先使用
let替代var,避免作用域污染。
3. const 声明
const 用于声明常量,具有以下特性:
- 块级作用域:与
let相同。 - 必须初始化:声明时必须赋值。
- 不可重新赋值:变量引用不可变(但对于对象或数组,属性或元素仍可修改)。
- 不可重复声明:同
let。
const PI = 3.14;
// PI = 3.1415; // 报错:无法重新赋值
const person = { name: "Alice" };
person.name = "Bob"; // 允许修改属性
// person = { name: "Charlie" }; // 报错:无法重新赋值
最佳实践:默认使用
const,仅在需要重新赋值时使用let。
4. TypeScript 中的变量声明
TypeScript 会对变量类型进行静态检查:
- 如果变量声明时未指定类型,TypeScript 会根据初始值推断类型。
- 显式类型注解可以增强代码可读性。
let age: number = 25; // 显式类型注解
const message = "Hello"; // 推断为 string 类型
5. 总结对比
| 特性 | var | let | const |
|---|---|---|---|
| 作用域 | 函数作用域 | 块级作用域 | 块级作用域 |
| 变量提升 | 是 | 否 | 否 |
| 重复声明 | 允许 | 禁止 | 禁止 |
| 重新赋值 | 允许 | 允许 | 禁止 |
| 初始化要求 | 无 | 无 | 必须初始化 |
推荐实践:
- 默认使用
const。 - 需要重新赋值时用
let。 - 避免使用
var。
