首先三者都是用来声明变量的
var
作用范围:var没有块级作用域,在任何位置定义的变量在外层都可以访问到
作用域:
全局作用域:在最外层定义的变量
局部作用域:在{}中定义的变量
特点:首先如果在函数内部,就优先在函数内部查找变量,如果没有就继续向外层查找
var定义的变量可以提升
console.log(a) // 变量会提升,只是声明但是没有定义
var a = 123
变成这样
var a // 变量提升
console.log(a) // 输出undefined
a = 123
let
let声明的变量只是在它所在的代码块中有效
for (let i = 0;i<10;i++){
console.log(i)
}
console.log(i) // i is not defind
因为是let声明的变量,只是在块级作用域中有效,外部无法访问,所以会报错
不可以重复声明定义
function a () {
let b = 123
let b = 234
console.log(b)
}
a()
这里会报错:Identifier 'a' has already been declared
不存在变量的提升
console.log(aa) // undefined
var aa = 123
console.log(foo) // 报错
let foo = 'abc'
块级作用域
function foo () {
let a = 123
if (true) {
let a = 234
}
console.log(a)
}
foo() // 输出123
const
定义常量,一旦定义不可修改
const a = 123
a = 235
console.log(a) // 报错 Identifier 'a' has already been declared
块级作用域
if (true) {
const foo = 123
}
console.log(foo) // 报错 a is not defind
不可重复声明
const foo = 123
const foo = 234
console.log(foo) // 报错 Identifier 'foo' has already been declared
不存在变量提升
console.log(a) // foo is not defined
const a = 123
引用类型不可直接修改值(赋值),但是可以添加属性
const arr = []
arr.push(1)
console.log(arr) [1]
----------------------------
const arr = []
arr = [2]
console.log(arr) // 报错 Identifier 'arr' has already been declared
好了,差不多就这些啦
1.文章有很多不足,如果哪里写的不对欢迎指正
2.您的支持就是对我最大的鼓励