其基本原理就是JavaScript的作用域链,下面以对比的方式来展示一下函数级作用域和块级作用域。

函数级作用域

var fns = [];
for (var i = 0; i < 5 ; i++){
//fns.push(() => {console.log(i)});
fns.push(function(){
console.log(i)
})
}
fns.forEach(fn => fn());

运行结果是

5
5
5
5
5

块级作用域

var fns = [];
for (let i = 0; i < 5 ; i++){
//fns.push(() => {console.log(i)});
fns.push(function(){
console.log(i)
})
}
fns.forEach(fn => fn());

运行结果是

0
1
2
3
4
05-21 21:54