var, let, const, function声明变量的区别

发布于:2023-01-04 ⋅ 阅读:(222) ⋅ 点赞:(0)

原文:我用了两个月的时间才理解 let

首先说明一下,这里的区别更多的指的是在变量提升方面的区别

1 var声明的变量

console.log(a)    // undefined
var a = 10

第一步,create a

第二步,initialized a -> 将a的值初始化为undefined

第三步,执行代码 

        console.log(a) // undefined

        a = 10

2 let声明的变量

console.log(a)    // ReferenceError
let a = 10
a = 20

第一步,create a

第二步,执行console.log(a),由于此时a还未被初始化,a存在于暂时性死区里面,所以无法使用,所以会报ReferenceError错误

// 由于上一步报错,此后的步骤不会执行

第三步,初始化a并赋值,a = 10

第四步,重新赋值,将20重新赋值给a

3 const声明的变量

console.log(a)    // ReferenceError
const a = 10
a = 20    // TypeError: Assignment to constant variable.

第一步,create a

第二步,执行console.log(a),由于此时a还未被初始化,a存在于暂时性死区里面,所以无法使用,所以会报ReferenceError错误

// 由于上一步报错,此后的步骤不会执行

第三步,初始化a并赋值,a = 10(const声明的变量必须且只能被赋值一次

第四步,报错// TypeError: Assignment to constant variable.

4 function声明的变量

fn()
function fn() {
    console.log(3)
}

第一步,create fn

第二步,初始化并赋值 fn = function(){console.log(3)}

第三步,执行fn()         // 打印3

再回过头讨论他们在变量提升方面的区别

之前一直以为,let, const不会有变量提示,其实let和const都会有变量提升,只不过与var比较,

  1. let,const的创建阶段被提升
  2. var的创建阶段和初始化阶段被提升
  3. function将创建阶段,初始化阶段,赋值阶段都提示

再结合以上代码得出

我的理解:

未被初始化的变量会进入暂时性死区,无法使用,而暂时死区可以理解为变量创建阶段后和初始化之前这段时区


网站公告

今日签到

点亮在社区的每一天
去签到