let与var与const,变量提升,函数提升,暂时性死区(TDZ)

1、var变量默认提升:

  console.log(i);

  var i = 1;

  输出undefined,并不是变量不存在。

 

2、函数默认提升:

  test();

  function test(){

  console.log(1);

  }

  输出1。

 

3、es6之前 JavaScript默认是函数作用域、全局作用域,es6引进了let和const可以使用块级作用域。

 

4、let与var的区别:

  let没有变量提升。

  let实现了块级作用域。

 

5、let和const的区别:const 声明时必须进行初始化,且初始化后值不可再修改,其他特性与let一样。

 

6、暂时性死区(TDZ):

  var i = 1;

  function(){

  i = 2;

  let i;

  }

  浏览器直接报错。

  暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。

 

面试题:

<script>
for(var i = 0 ;i < 10;i++){
    setTimeout(function(){
         console.log(i);
    },0);
}
</script>

setimout 执行的时候 for 已经执行完毕,所以打印出来 10 个 9 应该改用let。

posted @ 2021-10-10 04:42  向往全栈  阅读(204)  评论(0)    收藏  举报