说到var、const、let的区别,就不免的要提到作用域。在const、let没有引入之前,只有两种作用域,那就是全局作用域和函数作用域。
全局作用域
var a = 3
function test(){
console.log(a) // 3
}
函数作用域
function test(){
var a= 3
}
console.log(a) // ReferenceError: a is not defined
从引入let、const之后,又出现块作用域,通俗的讲就是{ },在块{ }内声明的变量无法从块外访问,但是var没有块作用域。
块作用域
{
var a = 3
let b = 3
}
console.log(a) // 3
console.log(b) // Uncaught ReferenceError: b is not defined
var相对于let、const还有重新声明的区别
重新声明变量
var a = 3
{
var a = 6
}
console.log(a) // 6
var b = 3
{
let b = 5
console.log(5) // 5
}
console.log(b) // 3
{
let a = 3
let a = 2 // Uncaught SyntaxError: Identifier 'a' has already been declared
}
由此看出使用let在块中重新声明变量不会重新声明块外的变量,但是在同一作用域下不能重新声明
相对于这两种声明变量的方法,const跟let比较相似,它们的区别是const不能直接重新赋值,并且在声明的时候就要赋值
const a = 3
a = 2 // Uncaught TypeError: Assignment to constant variable.
const b; // Uncaught SyntaxError: Missing initializer in const declaration
b = 3
虽然说const不能直接赋值,但是对于对象或者数组还是可以改的
const obj = {
name: '小明',
age: 18
}
obj.age = 20
const arr = [1,2,3]
arr[0] = 8
arr.push(6)
arr.splice(1,1)
其实就是说白了就是不能直接赋值。
作为补充来讲 var声明的全局对象可以直接通过window来访问,let、const不可以的
var a = 3
window.a // 3
let b = 3
window.b // undefined
第一次写文章,感觉写的挺烂的,也工作好几年了,找工作备受打击,虽然已经入职了,但是现在想重新学习js的基础,把看的东西都写成文章记录,一起学习!!!感谢!!!