重学js打基础 第一章var、const、let的区别

94 阅读2分钟

说到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的基础,把看的东西都写成文章记录,一起学习!!!感谢!!!