zoukankan      html  css  js  c++  java
  • setTimeout()的返回值

    今天遇到一个问题,题目如下:

    var len=4;
    while(len--){
      setTimeout(function(){
        console.log(len); 
      },0); 
      console.log(len); 
    };

     问:输出是什么?

    我的答案是打印3,2,1,0,-1,-1,-1,-1

    过程是先执行console.log(len) ,执行了4次之后,再执行4次 setTimeout

    问题很简单,但是我就想把console.log(len) 去掉,如下:

    var len=4;
    while(len--){
      setTimeout(function(){
        console.log(len); 
      },0); 
    };

    这下会打印什么?

    应该是-1,-1,-1,-1对吧,但是很遗憾,在chrome的控制台下显示的是 15,-1,-1,-1,-1为什么多个15,我就很好奇的在执行了一边这段代码,结果显示的是19,-1,-1,-1,-1

    再执行就是23,-1,-1,-1,-1

    很有有规律,这4个-1前面的数字是什么?我发现它是每次循环的次数,但是刚打开我之前没有执行啊,第一次打印也不能是15啊

    秉着知根知底的信念,就去谷歌了一下,发现这是setTimeout的返回值。为什么会有这么一个返回值呢,大家都知道setTimeout执行会被clearTimeout结束等待,它是靠什么结束的呢?是ID,

    大家可能不太相信,可以这样来尝试下:

    var len=4;
    while(len--){
      var time=setTimeout(function(){
        console.log(len); 
      },0); 
    };
    console.log(time);

    这样就可以知道time是什么了吧。

  • 相关阅读:
    asp.net mvc 自定义全局过滤器 验证用户是否登录
    jQuery怎么获取到富文本ueditor编辑器里面的文字和图片内容
    SqlServer分页操作
    不同数据库的分页查询
    js实现图片预览功能
    servlet编写验证码
    关于MVC模式的登录注册
    Request.UrlReferrer 使用
    关于通过Excel批量导入数据库的分析
    auto和100%的区别
  • 原文地址:https://www.cnblogs.com/wolm/p/3489066.html
Copyright © 2011-2022 走看看