前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >setInterval的用法

setInterval的用法

作者头像
gojam
发布2019-05-14 13:54:53
1.4K0
发布2019-05-14 13:54:53
举报
文章被收录于专栏:gojam技术备忘录
代码语言:javascript
复制
declare function setInterval(handler: any, timeout?: any, ...args: any[]): number;

MDN的解释

代码语言:javascript
复制
let intervalID = window.setInterval(func, delay[, param1, param2, ...]);
let intervalID = window.setInterval(code, delay);

参数 intervalID 是此重复操作的唯一辨识符,可以作为参数传给clearInterval()func 是你想要重复调用的函数。 code 是另一种语法的应用,是指你想要重复执行的一段字符串构成的代码(使用该语法是不推荐的,不推荐的原因和eval()一样)。 delay 是每次延迟的毫秒数 (一秒等于1000毫秒),函数的每次调用会在该延迟之后发生。和setTimeout一样,实际的延迟时间可能会稍长一点。 需要注意的是,IE不支持第一种语法中向延迟函数传递额外参数的功能.如果你想要在IE中达到同样的功能,你必须使用一种兼容代码 (查看callback arguments 一段).

使用示例

代码语言:javascript
复制
function func(){console.log('func')}
setInterval(func,1000)//每隔1000ms触发func
setInterval("func()",1000)

注意

func()指函数执行后的结果,因此传递func时不要写括号。

传递code时,code是String类型,相当于使用eval()解释代码。

无论使用setInterval()还是setTimeout(),函数的执行环境会被设置成window,也就是说在函数内使用this其实是指window对象(或global全局对象,ES没有指明如何访问global对象,它通常作为window对象的一部分)。MDN原文建议用自己写的setInterval代替原生的setInterval,众所周知JavaScript函数的prototype包括call和apply方法,这两种方法的第一个参数可以接受this的值,因此收集this值后再调用JavaScript原生setInterval调用call或apply就可以了。以下是官方给出的代码:

代码语言:javascript
复制
// Enable the passage of the 'this' object through the JavaScript timers

var __nativeST__ = window.setTimeout, __nativeSI__ = window.setInterval;

window.setTimeout = function (vCallback, nDelay /*, argumentToPass1, argumentToPass2, etc. */) {
  var oThis = this, aArgs = Array.prototype.slice.call(arguments, 2);
  return __nativeST__(vCallback instanceof Function ? function () {
    vCallback.apply(oThis, aArgs);
  } : vCallback, nDelay);
};

window.setInterval = function (vCallback, nDelay /*, argumentToPass1, argumentToPass2, etc. */) {
  var oThis = this, aArgs = Array.prototype.slice.call(arguments, 2);
  return __nativeSI__(vCallback instanceof Function ? function () {
    vCallback.apply(oThis, aArgs);
  } : vCallback, nDelay);
};

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年2月1日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MDN的解释
  • 使用示例
  • 注意
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档