var、let、const 的区别

2019-12-18  本文已影响0人  行走的蛋白质
提升 hoisting
console.log(num1) // undefined
var num1 = 1

console.log(num2) // 抛错
let num2 = 2

如上述示例:num1还没有被声明,但是我们可以使用它,这种情况就是变量提升。var 可以 let 不可以。
上述 var 声明变量等同于如下写法:

var num1
console.log(num1) // undefined
num1 = 1
var num1 = 666
var num1
console.log(num1) 

上述示例打印结果并不是 undefined 而是 666,变形如下:

var num1
var num1
num1 = 666
console.log(num1) // 666
console.log(fun1) // function() {}
function fun1() {

}
var fun1 = 2
console.log(fun1) // 2

上述示例说明函数也会提升,并且优于变量提升。

var num1 = 1
let num2 = 2
const num3 = 3

console.log(window.num1) // 1
console.log(window.num2) // undefined
console.log(window.num3) // undefined

function fun1() {
    console.log(num1) // 抛错
    let num1
}
fun1()

上述示例说明由 let 和 const 声明的变量并不会挂载到 window 上面,区别于 var
如果一个变量在声明前被使用就会报错原因就是由 let 和 const 声明的变量存在暂时性死区

function fun1() {
    fun2()
}
function fun2() {
    fun1()
}
fun1()

如果不存在提升,就不会存在 fun1 在 fun2 前面的同时 fun2 又在 fun1 前面的情况。

小结:
上一篇下一篇

猜你喜欢

热点阅读