var let 以及setTimeout 函数的问题

for(var i=0;i<=3;i++){ setTimeout(function() {  console.log(i)  }, 10);} 
//打印4次4

for(let i=0;i<=3;i++){ setTimeout(function() {  console.log(i)  }, 10);}
//打印出的是:0,1,2,3

为什么 var 和 let 的结果不一样

阅读 2.8k
1 个回答

在ES6之前,我们都是用var来声明变量,而且JS只有函数作用域和全局作用域,没有块级作用域,所以{}限定不了var声明变量的访问范围。
例如:

ES6新增的let,可以声明块级作用域的变量。

let 配合for循环的独特应用

let非常适合用于 for循环内部的块级作用域。JS中的for循环体比较特殊,每次执行都是一个全新的独立的块作用域,用let声明的变量传入到 for循环体的作用域后,不会发生改变,不受外界的影响。看一个常见的面试题目:

如果把 var改成 let声明:

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题