TypeScript let vs var
TS本质复用JS的变量规则,核心差异:作用域、变量提升、重复声明、暂时性死区
1.作用域
-
var:函数作用域 ,没有块级作用域({}、for、if 不隔离) -
let:块级作用域 ,{}内部声明,外面访问报错if(true){
var a = 1
let b = 2
}
console.log(a) // 1,var逃出if块
console.log(b) // ❌报错,let块内有效
for循环经典坑
for(var i=0;i<3;i++){}
console.log(i) //3,var泄露到循环外面
for(let j=0;j<3;j++){}
console.log(j) //❌报错
2.变量提升
-
var:提升,可以先使用再声明 ,值为undefinedconsole.log(x) // undefined
var x = 10 -
let:也会提升,但存在暂时性死区TDZ,声明前不能访问console.log(y) // ❌Cannot access 'y' before initialization
let y = 20
3.重复声明
-
var:允许同一作用域重复声明,覆盖var n =1
var n=2 //没问题 -
let:同一块内禁止重复声明,直接报错let m=1
let m=2 // ❌报错
4.全局挂载
var g = 99
// 浏览器:var会挂载到window对象 window.g ===99
let gg =99
// let不会挂载到window
TS额外小提示
-
尽量不用var ,现代TS/JS优先用
let(可修改) /const(只读) -
let允许后续重新赋值,const不允许重新赋值let num =1
num=2 // ✅可以修改const num2=1
num2=2 //❌
快速对照表
| 特性 | var | let |
|---|---|---|
| 作用域 | 函数作用域 | 块级作用域 {} |
| 提升 | 提升,访问得undefined | 提升,暂时性死区,访问报错 |
| 重复声明 | 允许 | 禁止 |
| 全局挂载window | 是 | 否 |
| 暂时性死区 | 无 | 有 |
总结:
var老旧,漏洞多;写TS一律优先let/const,放弃var。