1. var
var 是全局作用域和函数作用域
- 全局作用域——
变量在任何地方都可以使用
var carName = " Volvo";
// 此处可调用 carName 变量
function myFunction() {
// 函数内可调用 carName 变量
}
- 函数作用域——
变量在函数里才可以使用
function myFunction() {
var carName = "Volvo";
// 函数内可调用 carName 变量
}
// 此处调用 carName 变量,就会报错
console.log(carName) // Uncaught ReferenceError: carName is not defined
var 变量声明会被提升,并初始化成 undefined
console.log(a) // undefined
var a = 1
相当于
var a = undefined
console.log(a) // undefined
a = 1
2. let、const
let 和 const 是块级作用域
let 或 const声明的变量只在 let 或 const命令所在的代码块{}
内有效,在{}
之外不能访问。
var x = 10;
// 这里输出 x 为 10
{
let x = 2;
// 这里输出 x 为 2
}
// 这里输出 x 为 10
let、const 也存在变量提升,不过变量并没有初始化成 undefined
console.log(a) // Cannot access 'a' before initialization 不能在初始化之前访问 a
let a = 1
相当于
let a
console.log(a) // Cannot access 'a' before initialization 不能在初始化之前访问 a
a = 1