js–for循环每隔一秒打印一个数(1 2 3 4 5)
//字节跳动面试遇到的问题
法一:
//ES6:let
for( let i = 1 ; i < 6 ; i++ ){
setTimeout( function(){
console.log( i )
},1000*i )
}
法二:
//立即执行函数 闭包
for( var i = 1 ; i < 6 ; i++ ){
(function(j){
setTimeout( function(){
console.log( j )
},1000*j )
})(i)
}
补充:
老虎集团笔试遇到的问题(考察let与var区别):
for( let i = 0 ; i < 2 ; i++ ){
setTimeout( function(){
console.log( i )
},100 )
} // 0 1
for( var i = 0 ; i < 2 ; i++ ){
setTimeout( function(){
console.log( i )
},100 )
} //2 2
//变量i是let声明的,当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量
//使用let变量除了作用域是在for区块中,会为每次循环执行建立一个新的词法环境,拷贝所有的变量名称与值到下一个循环执行。
比如:
for( let i = 0 ; i < 2; i++ ){
console.log( i )
}
可以理解为:
let i;
for( i = 0 ; i < 2 ; i++ ){
let j = i; //每次循环都会创建一个新的j变量
console.log( j );
}