这道题,想让它输出的值为1到10有几种方法?

这个只能输出10,什么原因呢?
这道题,想让它输出的值为1到10有几种改写方法?什么原理?

for(var i=1; i<10; i++){
  setTimeout(()=>{
    console.log(i)
  },1000)
}
阅读 2.4k
3 个回答

这不就是考let和var的区别:
js虽然没提到域的感念,但确实存在,一个大括号就是一个作用域,var会生成一个全局的变量i,每次遍历都会重置i的值,let则会在相应的作用域生成唯一的i,保留当前执行的值,反正let的出现用的最多的地方就是这儿0.0

for(let i=1; i<10; i++){
  setTimeout(()=>{
    console.log(i)
  },1000)
}

function run(num){
    console.log(num)
    if(num <10){
        run(num+1)
    }
}
run(0)

let n = 0;
while(n<10){
    n++;
    console.log(n)
}

在有let之前,用闭包

for(var i=1; i<3; i++){
  (i=>setTimeout(()=>{
    console.log(i)
  },1000))(i)
}

`
for(var i=1; i<10; i++){
setTimeout(console.log,1000, i);
}

for(var i=1; i<10; i++){
const j = i;
setTimeout(()=>{

console.log(j)

},1000)
}
`

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题