为了账号安全,请及时绑定邮箱和手机立即绑定

这段代码的执行结果是什么?

for (var i = 0; i < 10; i++) {
   setTimeout(function() {console.log(i); }, 100 * i);
}  

正在回答

7 回答

var ==


0 回复 有任何疑惑可以回复我~

10个10,这个涉及到了函数的闭包和作用域,这里实际上只有一个i,循环的10个函数是共享一个i的引用,如果想输出0到9的话只需将var 改成 let 即可,这样就在函数每次执行的时候创建了一个闭包

0 回复 有任何疑惑可以回复我~

10啊

0 回复 有任何疑惑可以回复我~

你可以这样理解,先是for(vari= 0; i< 10; i++){}然后console.log(i)执行十次

,毕竟console.log(i)是延迟执行的,它也是个函数,只有当它执行的时候参数才开始传入的


0 回复 有任何疑惑可以回复我~

for (var i=0; i<5; i++){

  (function(i){

      setTimeout(function(){

          console.log(i);

      },i*1000);

  })(i);

}


0 回复 有任何疑惑可以回复我~

在执行setTimeout的时候,上面的i已经初始化完成了,此时i=10,所以。。。。。

0 回复 有任何疑惑可以回复我~
#1

一只特立独行的doge

为什么每次都是10呢,setTimeout不是只是延迟执行吗,而且只有执行完了,for应该才会循环啊,。。为什么每次都是10呢?
2016-06-21 回复 有任何疑惑可以回复我~

在控制台输出10个10;

不是输出0到9;

0 回复 有任何疑惑可以回复我~
#1

一别经年 提问者

可以解释下吗?
2016-01-05 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

这段代码的执行结果是什么?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信