setTimeout的新发现

最近遇到个setTimeout回调函数做闭包出现的问题,解决这种问题时发现笔者给setTimeout加了第三个参数,瞬间觉得自己好像错过了什么。。。。。。

setTimeout  API文档链接:https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout

一直以来,以为setTimeout的用法应该是这样的:setTimeout(callback,delay);
    callback:回调函数。
    delay:执行代码前需等待的毫秒数。

今天我看到下面这段为解决闭包带来的子函数作用域访问的是父函数执行后的变量值 问题,如下代码,瞬间不明所以

for (var i = 0; i < 5; i++) {
 setTimeout(function(j) {
 console.log(new Date, j);
 }, 1000, i);
}

console.log(new Date, i);

于是,API文档可以了解到,猜测第三个参数就是函数执行时的参数的值。

setTimeout(function(value){
  console.log(value);
},1000,‘你会成功的,wtl!‘);

控制台输出,‘你会成功的,wtl!’;

总结:

setTimeout的完整形式应该是这样的:setTimeout(callback,delay,param1,param2,...);其中,callback,delay是必须的。其余参数依次是需要执行函数的参数。

时间: 2024-10-12 22:28:10

setTimeout的新发现的相关文章

setTimeout的异步传输机制

setTimeout是异步的,在设置完setTimeout后,指定代码会在设定的时间后加入到任务队列,但并不是立即执行,js是单线程语言,所有的代码按顺序执行,即同步执行,同步执行的代码放在执行队列中,而异步执行的setTimeout放在任务队列中,执行顺序是先执行完执行队列中的代码再去查看任务队列中是否有要执行的代码: 这段代码看上去好像4应该比5先打印出来,但实际上是先打印出5再打印出4: 就如上面所说的,1,3,5都放在执行队列中,而4,2放在任务队列中,所以4,2要等执行队列中的1,3,

setTimeout ,setInterval

1.setInterval是间隔执行,间隔多久执行一次,执行多次 setInvertal(function(){},500) 2.setTimeout是延迟执行,执行一次 setTimeout(function(){},500) 清除定时器 param=setInterval(function(){},300) clearInterval(param)关闭定时器

JS setTimeout clearTimeout

<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>计时器</title> </head> <script type="text/javascript"> var num=0; var i; fu

Javascript引擎单线程机制及setTimeout执行原理说明

setTimeout用法在实际项目中还是会时常遇到.比如浏览器会聪明的等到一个函数堆栈结束后才改变DOM,如果再这个函数堆栈中把页面背景先从白色设为红色,再设回白色,那么浏览器会认为DOM没有发生任何改变而忽略这两句话,因此我们可以通过setTimeout把“设回白色”函数加入下一个堆栈,那么就可以确保背景颜色发生过改变了(虽然速度很快可能无法被察觉). 总之,setTimeout增加了Javascript函数调用的灵活性,为函数执行顺序的调度提供极大便利. 然后,我们从基础的层面来看看:理解J

setTimeout与setInterval

setTimeout(表达式,时间)在执行时,是在载入后的延迟指定时间去执行一次表达式,计数一次. setInterval(表达式,时间)在载入后,每隔指定的时间就执行一次表达式. 总的来说,setTimeout单次调用,setInterval多次调用. 嵌套setTimeout方法:将setTimeout包含于被执行函数中,然后在函数外再次使用setTimeout来达到定时执行的目的,这样就能形成反复定时的效果. 使用setInterval需要手动停止触发,而使用嵌套setTimeout方法不

setTimeout可以传第三个甚至更多个参数

以前在使用setTimeout()方法的时候,都是传两个参数第一个参数是一个函数,第二个参数是毫秒数,表示异步处理过多少毫秒执行第一个函数参数.后来有看到有人给setTimeout()传第三个参数,不清楚传第三个参数是干嘛的,于是就学习了一下.第三个或者更多参数都是第一个函数的参数,详情请看https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout. 一个简单的例子如下: functi

js延时函数setTimeout

实现一个延时执行的效果,现记录如下: <html> <head> <script type="text/javascript" src="/jquery/jquery.js"></script> <script type="text/javascript"> function alertV(){ alert("000"); } setTimeout(alertV,10

循环/闭包/setTimeout/Promise 综合

控制台显示内容为? for (var i = 0; i < 5; i++) { console.log(i); } 控制台显示内容为? for (var i = 0; i < 5; i++) { setTimeout(function() { console.log(i); }, 1000 * i); } 控制台显示内容为? for (var i = 0; i < 5; i++) { (function(i) { setTimeout(function() { console.log(i

setTimeout()和setInterval()的用法

JS里设定延时: 使用SetInterval和设定延时函数setTimeout 很类似.setTimeout 运用在延迟一段时间,再进行某项操作. setTimeout("function",time) 设置一个超时对象 setInterval("function",time) 设置一个超时对象 SetInterval为自动重复,setTimeout不会重复. clearTimeout(对象) 清除已设置的setTimeout对象 clearInterval(对象)