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