setTimeout 深度剖析,前端开发工作

本文详细探讨了JavaScript的setTimeout函数,包括其回调函数的this指向、参数传递、执行间隔时间以及常见问题和解决方案。例如,当setTimeout用于方法时,this不再指向原对象,需要通过函数绑定或在匿名函数中调用来保持正确的作用域。此外,文章还提到了setTimeout的时间间隔并非绝对准确,并介绍了setTimeout(func,0)的用途,用于在当前任务结束后尽快执行指定的函数。最后,文中还讨论了在不同浏览器环境下setTimeout的行为差异,以及在前端开发中如何处理这些问题。" 103083627,9157993,Nginx配置文件nginx.conf详解与重写规则实践,"['Nginx配置', '服务器配置', 'HTTP重写', '网络服务器', 'web服务器']
摘要由CSDN通过智能技术生成

var timerId = setTimeout(func|code, delay)

上面代码中,setTimeout 函数接受两个参数,第一个参数 func|code 是将要推迟执行的函数名或者一段代码,第二个参数 delay 是推迟执行的毫秒数。

console.log(1);

setTimeout(‘console.log(2)’,1000);

console.log(3);

上面代码的输出结果就是1,3,2,因为 setTimeout 指定第二行语句推迟 1000 毫秒再执行(如果这在 Sublime 下运用插件以 nodejs 环境来执行,许解释器不同,会报错)。

需要注意的是,推迟执行的代码必须以字符串的形式,放入 setTimeout,因为引擎内部使用 eval 函数,将字符串转为代码。如果推迟执行的是函数,则可以直接将函数名,放入 setTimeout。一方面 eval 函数有安全顾虑,另一方面为了便于 JavaScript 引擎优化代码,setTimeout 方法一般总是采用函数名的形式,就像下面这样。

function func(){

console.log(2);

}

setTimeout(func,1000);

// 或者

setTimeout(function (){console.log(2)},1000);

setTimeout 传参数


除了前两个参数,setTimeout 还允许添加更多的参数。它们将被传入推迟执行的函数(回调函数)。

setTimeout(function(a,b){

console.log(a+b);

},1000,1,1);

上面代码中,setTimeout 共有 4 个参数。最后那两个参数,将在 1000 毫秒之后回调函数执行时,作为回调函数的参数。

IE 9.0 及以下版本,只允许 setTimeout 有两个参数,不支持更多的参数;可以在匿名函数中,让回调函数带参数运行,再把匿名函数输入 setTimeout;例如:

setTimeout(function() {

myFunc(“one”, “two”, “three”);

}, 1000);

当然也可以使用 bindapply 方法来解决。

例如使用 bind 方法,把多余的参数绑定在回调函数上面,生成一个新的函数输入 setTimeout。

setTimeout( function(arg1){}.bind(undefined, 10), 1000 );

上面代码中,bind 方法第一个参数是 undefined,表示将原函数的 this 绑定全局作用域,第二个参数是要传入原函

  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值