资讯专栏INFORMATION COLUMN

setTimeout()的返回值

figofuture / 1768人阅读

摘要:为什么会有这么一个返回值呢,大家都知道执行会被结束等待,它是靠什么结束的呢是,大家可能不太相信,可以这样来尝试下复制代码复制代码这样就可以知道是什么了吧。

谈谈我对js中timer的认识

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是什么了吧。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/106500.html

相关文章

  • JS setTimeout参数和返回问题

    摘要:定义和用法方法用于在指定的毫秒数后调用函数或计算表达式。参数示例回调函数时间参数参数参数结果返回值返回整型数值是的唯一标识符可用于取消设置的函数。示例结果取消定时器即其返回值的作用为作为一个引用指向 定义和用法 setTimeout()方法用于在指定的毫秒数后调用函数或计算表达式。 参数 示例:setTimeout(回调函数,时间,参数1,参数2,...,参数n) showImg(ht...

    callmewhy 评论0 收藏0
  • setTimeout&Promise&Async之间爱恨情仇

    摘要:但是提出标准,允许脚本创建多个线程,但是子线程完全受主线程控制。只是将事件插入了任务队列,必须等到当前代码执行栈执行完,主线程才会去执行它指定的回调函数。之后全局上下文进入函数调用栈。 setTimeout 一、setTimeout 初现 定义:setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。 语法: setTimeout(code, millisec...

    Half 评论0 收藏0
  • JavaScriptthis

    摘要:函数的调用者是异步函数,不会为回调函数指定值。值为表示在全局对象下执行该函数执行方法,返回一个函数作为回调函数,并且将需要向它传递的作为参数。 重要 JavaScript的this是有函数求值是的调用者决定的 JavaScript的this是有函数求值是的调用者决定的 JavaScript的this是有函数求值是的调用者决定的 函数中的this 函数中的this在调用时才有意义...

    charles_paul 评论0 收藏0
  • JavaScript 定时器

    摘要:定时器方法相关方法有四种。返回值返回值是一个正整数,表示定时器的编号。这个值可以传递给来取消该定时器。使用方法很简单只有一个参数,该参数为您要取消定时器的标识符。用法很简单当代码运行到这行的时候,会取消所设置的定时器。 简单介绍在JavaScript中定时器有两个 setInterval() 与 setTime...

    王伟廷 评论0 收藏0
  • setTimeout和setInterval

    摘要:一个页面在浏览器显示出来至少需要个线程,分别是引擎,渲染,事件触发。其中事件触发是独立于其他个执行的,而和是相互排斥的,也就是说同一个时间二者只有一个在工作。 作为DOM本身十分重要的2个异步执行函数,初学者感觉这个很不好理解,我简单写一写我的理解 setTimeout (func, millisec); setInterval(func, millisec); 这两个方法在形式看起来...

    SnaiLiu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<