Appearance
var、let 和 const 区别
| 名称 | var | let | const |
|---|---|---|---|
| 块作用域 | ✔ | ✔ | |
| 全局属性 | ✔ | ||
| 变量提升 | ✔ | ||
| 暂时性死区 | ✔ | ✔ | |
| 重复申明 | ✔ | ||
| 必须初始化 | ✔ | ||
| 不可修改值 | ✔ |
var 与 let 比较
var与let都拥有全局作用域、函数作用域,let还有块级作用域;
jsx
// 全局作用域
var var_a = 1;
let let_a = 1;
// 函数作用域
function () {
var var_b = 2;
let let_b = 2;
}
// 块级作用域
{
var var_c = 3
let let_c = 3
}
console.log(var_c) // 1
console.log(let_c) // let_c is not definedvar的全局属性会添加给window,未申明直接赋值也会挂在window,let不会;
js
var a = 1
b = 1
let c = 1
console.log(window.a) // 1
console.log(window.b) // 1
console.log(window.c) // undefined- 未申明先使用的变量,
var存在变量提升,let存在暂时性死区;
js
console.log(a) // undefined
console.log(b) // Cannot access 'b' before initialization
var a = 1
let b = 2- 同一作用域里,
var可以重复申明,let不行;
js
var a = 1
var a = 2
let b = 1
let b = 2 // SyntaxError: Identifier 'b' has already been declaredconst 与 let 比较
const 与 let 类似,但必须初始化,并且不可修改;当初始值为引用类型时,引用类型内部的值可修改。
js
const a // SyntaxError: Unexpected token
const b = { c: 1 }
b = 1 // Assignment to constant variable
b.c = 2;
console.log(b) // { c: 2 }应用场景
- 利用
let块级作用域特性来写循环。
js
for (var index = 0; index < 5; index++) {
setTimeout(() => console.log(index))
}
// 其输出结果:5 5 5 5 5
for (let index = 0; index < 5; index++) {
setTimeout(() => console.log(index))
}
// 其输出结果:0 1 2 3 4- 利用
const对前端常用展示文本统一管理,即防止串改,也方便修改。
js
// constant.js 文件
export const TITLE = '我是标题'
export const AUTHOR = '作者'
// 任意文件引入使用
import { TITLE, AUTHOR } from 'constant.js'