其基本原理就是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());
运行结果是
55555
块级作用域
var fns = [];for (let i = 0; i < 5 ; i++){ //fns.push(() => {console.log(i)}); fns.push(function(){ console.log(i) })}fns.forEach(fn => fn());
运行结果是
01234