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

来源:3-1 [JavaScript]block语句、var语句

一别经年

2015-12-29 21:54

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

写回答 关注

7回答

  • 但尽人事莫问前程
    2018-12-03 15:03:34
    var ==


  • 我依旧已久
    2018-10-16 08:51:28

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

  • yinyun
    2016-11-19 11:12:59

    10啊

  • 慕粉3830774
    2016-11-08 18:01:05

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

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


  • 肉肉思密达
    2016-09-19 17:16:27

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

      (function(i){

          setTimeout(function(){

              console.log(i);

          },i*1000);

      })(i);

    }


  • Down_Up
    2016-04-30 16:20:09

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

    一只特立独行...

    为什么每次都是10呢,setTimeout不是只是延迟执行吗,而且只有执行完了,for应该才会循环啊,。。为什么每次都是10呢?

    2016-06-21 11:25:38

    共 1 条回复 >

  • 狂飙的蜗牛_1
    2015-12-29 22:15:55

    在控制台输出10个10;

    不是输出0到9;

    一别经年

    可以解释下吗?

    2016-01-05 21:45:46

    共 1 条回复 >

JavaScript深入浅出

由浅入深学习JS语言特性,且解析JS常见误区,从入门到掌握

281102 学习 · 1020 问题

查看课程

相似问题