setTimeout()

超时限制-节流

  1. /* interval(),在setInterval()时间间隔到期后调用。
  2. * timeout()setTimeout()计时器到期后调用。
  3. * run(),在程序启动时调用。
  4. * logline()在间隔和计时器到期时称为,它在出现节流时显示最近的间隔和当前的间隔以及指示符。
  5. **/
  6. var to_timer = 0; // duration is zero milliseconds
  7. var interval_timer = 0; // expires immediately
  8. var cleanup_timer = 0; // fires at end of run
  9. var last = 0; // last millisecond recorded
  10. var duration = 15; // run duration in milliseconds
  11. var lineno = 0; // current output line number
  12. function interval() {
  13. logline(new Date().getMilliseconds());
  14. }
  15. function timeout() {
  16. logline(new Date().getMilliseconds());
  17. interval();
  18. to_timer = setTimeout(timeout, 0);
  19. }
  20. function run() {
  21. interval_timer = setInterval(interval, 0);
  22. to_timer = setTimeout(timeout, 0);
  23. cleanup_timer = setInterval(cleanup, duration);
  24. last = 0;
  25. lineno = 0;
  26. document.getElementById("log").innerHTML = "";
  27. document.getElementById("log").innerHTML = "line last current";
  28. }
  29. function logline(msec) {
  30. // msec can't wrap: run duration > 1 second
  31. var c = "";
  32. if ((last != 0) && (last > msec - 1 /* variation */)) {
  33. c = "Throttled";
  34. }
  35. document.getElementById("log").innerHTML += "<pre>" + pad(lineno++, 2) + "  " + pad(last, 3) + "  " + msec + " " + c;
  36. last = msec;
  37. }
  38. function cleanup() {
  39. clearTimeout(to_timer);
  40. clearInterval(interval_timer)
  41. }
  42. function pad(num, count) {
  43. return num.toString().padStart(count, '0')
  44. }
  1. <p>Live Example</p>
  2. <button onclick="run();">Run</button>
  3. <div id="log"></div>

polyfill

将一个或多个参数传递给回调函数,但又在不支持使用setTimeout()或setInterval()(例如Internet Explorer 9及以下版本)发送其他参数的浏览器中运行,则 可以添加此polyfill来启用HTML5标准参数传递功能。

  1. /*\
  2. |*|
  3. |*| Polyfill which enables the passage of arbitrary arguments to the
  4. |*| callback functions of JavaScript timers (HTML5 standard syntax).
  5. |*|
  6. |*| https://developer.mozilla.org/en-US/docs/DOM/window.setInterval
  7. |*|
  8. |*| Syntax:
  9. |*| var timeoutID = window.setTimeout(func, delay[, arg1, arg2, ...]);
  10. |*| var timeoutID = window.setTimeout(code, delay);
  11. |*| var intervalID = window.setInterval(func, delay[, arg1, arg2, ...]);
  12. |*| var intervalID = window.setInterval(code, delay);
  13. |*|
  14. \*/
  15. (function() {
  16. setTimeout(function(arg1) {
  17. if (arg1 === 'test') {
  18. // feature test is passed, no need for polyfill
  19. return;
  20. }
  21. var __nativeST__ = window.setTimeout;
  22. window.setTimeout = function(vCallback, nDelay /*, argumentToPass1, argumentToPass2, etc. */ ) {
  23. var aArgs = Array.prototype.slice.call(arguments, 2);
  24. return __nativeST__(vCallback instanceof Function ? function() {
  25. vCallback.apply(null, aArgs);
  26. } : vCallback, nDelay);
  27. };
  28. }, 0, 'test');
  29. var interval = setInterval(function(arg1) {
  30. clearInterval(interval);
  31. if (arg1 === 'test') {
  32. // feature test is passed, no need for polyfill
  33. return;
  34. }
  35. var __nativeSI__ = window.setInterval;
  36. window.setInterval = function(vCallback, nDelay /*, argumentToPass1, argumentToPass2, etc. */ ) {
  37. var aArgs = Array.prototype.slice.call(arguments, 2);
  38. return __nativeSI__(vCallback instanceof Function ? function() {
  39. vCallback.apply(null, aArgs);
  40. } : vCallback, nDelay);
  41. };
  42. }, 0, 'test');
  43. }())

兼容IE9

  1. js页面注释
  1. /*@cc_on
  2. // conditional IE < 9 only fix
  3. @if (@_jscript_version <= 9)
  4. (function(f){
  5. window.setTimeout = f(window.setTimeout);
  6. window.setInterval = f(window.setInterval);
  7. })(function(f){
  8. return function(c,t){
  9. var a=[].slice.call(arguments,2);
  10. return f(function(){
  11. c instanceof Function ? c.apply(this,a) : eval(c)
  12. },t)
  13. }
  14. });
  15. @end
  16. @*/
  1. html页面注释
  1. <!--[if lte IE 9]>
  2. <script>
  3. (function(f){
  4. window.setTimeout=f(window.setTimeout);
  5. window.setInterval=f(window.setInterval);
  6. })(function(f){
  7. return function(c,t){
  8. var a=[].slice.call(arguments,2);
  9. return f(function(){
  10. c instanceof Function ? c.apply(this,a) : eval(c)
  11. },t)
  12. }
  13. });
  14. </script>
  15. <![endif]-->

this指向

当您将方法传递给setTimeout()(或其他任何函数)时,将使用this可能与您期望的值不同的值来调用该方法。

  1. myArray = ['zero', 'one', 'two'];
  2. myArray.myMethod = function (sProperty) {
  3. console.log(arguments.length > 0 ? this[sProperty] : this);
  4. };
  5. setTimeout(myArray.myMethod, 1.0*1000); // [object Window]
  6. setTimeout(myArray.myMethod, 1.5*1000, '1');
  7. // ERR:Blocked a frame with origin "https://developer.mozilla.org" from accessing a cross-origin frame. at myArray.myMethod
  1. 匿名函数
  1. setTimeout(function(){
  2. myArray.myMethod('1')
  3. }, 2.5*1000);
  1. 箭头函数
  1. setTimeout(() => {
  2. myArray.myMethod('1')
  3. }, 2.5*1000);
  1. bind
  1. setTimeout(myArray.myMethod.bind(myArray), 1.5*1000, '1');

timeOut延时

  1. // 直到调用的线程setTimeout()终止,函数或代码段才能执行
  2. function foo() {
  3. console.log('foo has been called');
  4. }
  5. setTimeout(foo, 0);
  6. console.log('After setTimeout');
  1. After setTimeout
  2. foo has been called

最大timeOut值

包括Internet Explorer,Chrome,Safari和Firefox在内的浏览器在内部将延迟存储为32位带符号整数。当使用大于2,147,483,647 ms(约24.8天)的延迟时,这会导致整数溢出,从而导致超时立即执行。

JS学习-setTimeout()的更多相关文章

  1. 【Knockout.js 学习体验之旅】(1)ko初体验

    前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...

  2. javascript的setTimeout()用法总结,js的setTimeout()方法

    引子 js的setTimeout方法用处比较多,通常用在页面刷新了.延迟执行了等等.但是很多javascript新手对setTimeout的用法还是不是很了解.虽然我学习和应用javascript已经 ...

  3. Node.js学习之TCP/IP数据通讯

    Node.js学习之TCP/IP数据通讯 1.使用net模块实现基于TCP的数据通讯 提供了一个net模块,专用于实现TCP服务器与TCP客户端之间的通信 1.1创建TCP服务器 在Node.js利用 ...

  4. 【转】JS中setTimeout和setInterval的最大延时值详解

    前言 JavaScript提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()和setInterval()这两个函数来完成.而这篇文中主要给大家介绍的是关于JS中setTi ...

  5. vue.js学习之better-scroll封装的轮播图初始化失败

    vue.js学习之better-scroll封装的轮播图初始化失败 问题一:slider组件初始化失败 原因:页面异步获取数据很慢,导致slider初始化之后,数据还未获取到,导致图片还未加载 解决方 ...

  6. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  7. js学习之变量、作用域和内存问题

    js学习之变量.作用域和内存问题 标签(空格分隔): javascript 变量 1.基本类型和引用类型: 基本类型值:Undefined, Null, Boolean, Number, String ...

  8. 【Knockout.js 学习体验之旅】(3)模板绑定

    本文是[Knockout.js 学习体验之旅]系列文章的第3篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...

  9. 【Knockout.js 学习体验之旅】(2)花式捆绑

    本文是[Knockout.js 学习体验之旅]系列文章的第2篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...

  10. js学习篇1--数组

    javascript的数组可以包含各种类型的数据. 1. 数组的长度 ,直接用 length 属性; var arr=[1,2,3]; arr.length; js中,直接给数组的length赋值是会 ...

随机推荐

  1. CentOS 镜像官网下载链接

    CentOS 镜像官网下载链接: https://www.centos.org/download/mirrors/ http://mirrors.aliyun.com/centos/ https:// ...

  2. Software_C#_grammer_Deletegate--Strategy

    2018-04-30 18:59:04. 由 委托的 动态选择方法 联想到的 Strategy Pattern 一 : 策略模式 将  宿主   与  算法 分离, 算法被封装为对象, 客户端代码用 ...

  3. k8s暂停一个pod

    模拟k8s暂停一个服务:kubectl scale --replicas=0 deployment/[deployment]  -n [namespace](如要恢复设置参数--replicas=1即 ...

  4. 关于 MySQL 的 General Log 功能

    检查 General Log 输出目标 SHOW GLOBAL VARIABLES LIKE 'log_output'; # Type: Set # Default Value: FILE # Val ...

  5. 【杂项】利用CUDA实现tensorflow的gpu加速——以NXP的eIQ Portal Command line环境为例

    这是一个针对于eIQ的解决方案,笔者所用显卡是GTX1650 step1:下载CUDA和CuDnn 2022年3月,eIQ所使用tensorflow版本为2.5.0,因此对应CUDA 11.2.0,C ...

  6. matlab算符合集

    1.逻辑算符 1)且 : A & B -- 两个逻辑数组之间 逐个元素 进行逻辑"与"操作 AB可为矩阵. 首先判断表达式A的逻辑值,然后判断B,继而进行逻辑"与 ...

  7. 尚硅谷大数据技术之Kettle软件介绍与使用方法

    ETL(Extract-Transform-Load的缩写,即数据抽取.转换.装载的过程),对于企业或行业应用来说,我们经常会遇到各种数据的处理,转换,迁移,所以了解并掌握一种ETL工具的使用,必不可 ...

  8. Spring不同版本的AOP

    1.Spring4.SpringBoot1 1.1 代码实现 public interface Calculator { int div(int a,int b); } @Component publ ...

  9. Mac 启动转换助理 安装 win10

    Mac 启动转换助理 安装 win10 Mac的处理器 是Inter芯 才有该功能 打开启动转换助理/Bootcamp 设置分区大小 win10安装完成后 在左侧的此电脑中找到咱们的Boot Camp ...

  10. 可收集ALC问题[A non-collectible assembly may not reference a collectible assembly.]

    ITask程序集在共享类库中定义,初衷是任务调度程序,创建新的可卸载ALC以供每一个任务运行,此时会出现两个问题: 任务调度程序加载了任务程序后,任务程序中的ITask类型和任务调度程序中的ITask ...