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 的结果不一样
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 的结果不一样
13 回答12.8k 阅读
8 回答2.6k 阅读
2 回答5.1k 阅读✓ 已解决
7 回答1.9k 阅读
3 回答2.2k 阅读✓ 已解决
5 回答850 阅读
3 回答1.1k 阅读✓ 已解决
在ES6之前,我们都是用var来声明变量,而且JS只有函数作用域和全局作用域,没有块级作用域,所以
{}
限定不了var声明变量的访问范围。例如:
ES6新增的
let
,可以声明块级作用域的变量。let 配合for循环的独特应用
let
非常适合用于for
循环内部的块级作用域。JS中的for循环体比较特殊,每次执行都是一个全新的独立的块作用域,用let声明的变量传入到 for循环体的作用域后,不会发生改变,不受外界的影响。看一个常见的面试题目:如果把
var
改成let
声明: