改造 以下代码,并依次输出0-9
for(var i=0;i<10;i++){
setTimeout(
()=>{console.log(i)},1000)
}方案一:解决用let代替var 解决变量提升带来的问题
for(let i=0;i<10;i++){
setTimeout(()=>{
console.log(i)
},1000)
}
//方案二:立即执行函数解决块级作用域的问题
for(var i=0;i<10;i++){
(function(i){
setTimeout(()=>{
console.log(i)
},1000)
})(i)
}
//方案三:定时器内不执行函数,让其浏览器自身给其包装好成方案二类似的函数
for(var i=0;i<10;i++){
setTimeout(
console.log(i)
,1000)
}
//方案四和三实现原理差不多
for(var i=0;i<10;i++){
setTimeout(
eval('console.log(i)')
,1000)
}
//方案五:彻底改变其执行过程,而是采用闭包解法
setTimeout(()=>{
for(var i=0;i<10;i++){
console.log(i)
}
},1000)
//方案六:利用try/catch的块级作用域实现
for(var i=0;i<10;i++){
try{
throw i
}catch(i){
setTimeout(()=>{
console.log(i)},
1000)
}
}