let 作用域

参考:https://zhuanlan.zhihu.com/p/28140450

本文绝大部分内容来自上述地址,做为学习资料修改后保存,感谢作者

MDN中 let 的描述可以简单的概括成:

1.let 声明的变量的作用域是块级的;

2.let 不能重复声明已存在的变量;

3.let 有暂时死区,不会被提升。

var 声明的过程:

代码如下:

  function fn(){
       var x =1
       var y =2
   }
   fn()

执行顺序:

1.进入fn,为fn创建一个环境。

2.找到fn中所有用var声明的变量,在这个环境中创建这些变量

3.变量初始化为undefined

4.执行代码

5.x=1将变量赋值为1,y=2将变量赋值为2

总结:var声明会在代码执行前就创建变量,并将其初始化为undefined(var的创建和初始化被提升了);

function 的声明过程:

1.找到所用用function 声明的变量,在环境中创建这些变量

2.将这些变量初始化并赋值

3.然后执行代码

总结:function声明会在代码执行前就创建、初始化并赋值

Let 声明的过程:

代码:

{
       let x = 1
       x=2
 }

过程:

1.找到所有用let声明的遍历,在环境中创建这些变量

2.开始执行代码(没有初始化)

3.执行 x = 1,将x初始化为1(并不是赋值,如果代码是let x ,就将x初始化为undefined)

4.执行x =2,将x进行赋值

5.如果在let x 以前使用x,由于x没有初始化,所以会报错;

总结:let只是创建变量这个过程被提升了,但是初始化没有提升;而var的创建和初始化都提升了;

总结:

1:let 的创建过程被提升了,但是初始化。

2:var 的创建和初始化都被提升了。

3:function 的创建、初始化和赋值都被提升了。

4:const 和let的区别是,const只有创建和初始化,没有赋值。

你可能感兴趣的:(let 作用域)