`
yanzhu2011
  • 浏览: 17792 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

setTimeout循环问题

 
阅读更多

一、需求描述

      如“1234”,按位数读1、2、3、4,且每位之间间隔1s

二、代码逻辑

function speakNumber2(no,len,i){ // no='1234',len=4,i=0
                if(i ≥ len){
                    clearTimeout(s) ;
                }else {
                    soundAlert("sound_"+no.charAt(i));
                    s = setTimeout(speakNumber2(no,len,++i), 1000);
                }
}

问题:在1s内把1、2、3、4一下读出来了

思路:改用setInterval,问题仍存在

         改为:s = setInterval(speakNumber2(no,len,++i), 1000*i);问题仍存在

三、分析

因为回调函数传参数问题;

重写setTimeOut方法,问题解决

var __sto = setTimeout;
            window.setTimeout = function(callback,timeout,param)
            {
                var args = Array.prototype.slice.call(arguments,2);
                var _cb = function()
                {
                    callback.apply(null,args);
                }
               
                __sto(_cb,timeout);
            }
           
            function speakNumber2(no){
                var len = no.length;
                for (var i = 0; i < len; i++) {
                    setTimeout(soundAlert, 500*i, "sound_merge"+no.charAt(i)); //第i个数,在第 500*i s 时执行
                }
               }

 

 

分享到:
评论

相关推荐

    关于JS定时器(setTimeout setInterval)定时不准问题1

    关于JS定时器(setTimeout setInterval)定时不准问题1 在JavaScript中,setTimeout和setInterval是两个基本的定时器函数,用于实现延迟执行或循环执行某个函数。然而,这两个函数在执行时往往和我们设置的延迟时间...

    Javascript中, setTimeout() 和 setInterval() 的方法

    在JavaScript编程中,`setTimeout()`和`setInterval()`是两个非常关键的函数,它们用于实现异步编程,特别是在处理动画、定时任务或者延迟执行代码时不可或缺。这两个函数都是全局对象`window`的方法,它们的区别...

    setTimeout应用(模拟站长之家导航)

    2. **延时更新**:如果导航栏包含实时信息,如天气、新闻或股票数据,`setTimeout`可以用来定期更新这些信息,避免过于频繁的请求导致性能问题。 3. **交互响应**:用户与导航栏交互时,例如鼠标悬停在某个链接上,...

    模态对话框导致setTimeout失效的解决方案(一)

    问题的根本在于模态对话框创建了一个新的事件循环,这个新的循环会在对话框关闭之前不会执行。因此,即使`setTimeout`的时间已经过去,其回调函数也不会在对话框打开期间执行。这在处理异步操作、动画效果或者期望的...

    解决循环中setTimeout执行顺序的问题

    解决循环中setTimeout执行顺序的问题 本文旨在解决JavaScript中的循环中setTimeout执行顺序的问题,并提供了多种解决方法。 知识点一:setTimeout的执行顺序 在JavaScript中,setTimeout函数可以使得函数延迟执行...

    for循环 + setTimeout 结合一些示例(前端面试题)

    最近在翻看以前的老书《node.js开发指南》,恰好碰到 for 循环 + setTimeout 的经典例子,于是重新梳理了思路并记录下。 二、写在前面,setTimeout 和 setInterval 的执行机制 在日常编码中,你会发现,给 ...

    js中setTimeout的妙用--防止循环超时

    在处理某些特定问题时,如防止循环超时,`setTimeout`能展现出其独特的价值。本文将深入探讨如何利用`setTimeout`来防止循环超时,特别是当遇到耗时操作时,如大数组的处理或服务器请求。 首先,我们需要了解...

    一个简单的死循环事例

    在JavaScript中,死循环可能通过事件监听、定时器(如setTimeout或setInterval)或其他异步操作不当触发。例如,一个永不完成的定时器任务会不断调用函数,形成死循环。 7. 性能优化:在发现死循环后,可以通过调整...

    JavaScript中setTimeout的那些事儿

    2. 在闭包中使用setTimeout时需要注意变量作用域问题,以及避免因循环过快而导致的问题。 3. 要注意递归的setTimeout可能会阻塞事件队列,影响页面响应。 综上所述,setTimeout是JavaScript中非常重要的一个功能,...

    Javascript定时器 三 setTimeout func 0

    尽管`setTimeout(func, 0)`在很多情况下能帮助我们解决异步问题,但过度使用可能导致性能下降,因为每次调用都会增加事件循环的负担。同时,由于其依赖于事件循环,执行顺序可能并不确定,因此在编写依赖于特定执行...

    微信小程序—setTimeOut定时器的问题及解决

    本文主要探讨了`setTimeOut`定时器在微信小程序中的应用和一些常见问题。`setTimeOut`是JavaScript中的一个基础功能,用于在指定的延迟时间后执行某段代码,这对于实现定时任务至关重要。 微信小程序提供了两种定时...

    JS中setTimeout()的用法详解

    // 初始调用以启动循环 setTimeout(repeatMessage, 2000); ``` #### 设定条件使setTimeout()停止 在实际应用中,我们可能需要在某个条件下停止执行`setTimeout()`,这时可以使用`clearTimeout()`函数。它需要一个`...

    js中setTimeout的妙用–防止循环超时

    JavaScript中的`setTimeout`函数在处理耗时操作时有一个巧妙的应用,即防止循环超时,确保浏览器不会因长时间运行的任务而假死。这个概念主要源于JavaScript的单线程特性,即同一时间只能执行一个任务。当遇到如向...

    关于JS中setTimeout()无法调用带参函数问题的解决方法.docx

    然而,一个常见的问题是在尝试使用`setTimeout()`调用带参数的函数时,参数往往无法正确传递。这是因为`setTimeout()`默认只接受一个函数引用和一个延迟时间作为参数,而不直接支持传递额外的参数。这个问题可以通过...

    js中settimeout方法加参数.docx

    #### 三、循环中的`setTimeout`与闭包问题 当在循环中使用`setTimeout`时,需要注意闭包问题。如果处理不当,可能会导致预期之外的结果。例如,在下面的例子中,虽然希望每个定时器都能输出对应的索引值,但实际上...

    解决vue的变量在settimeout内部效果失效的问题

    在Vue.js开发过程中,有时会遇到在`setTimeout`函数内部修改组件状态(如变量)时,预期的效果并未体现出来,这个问题通常与JavaScript的异步执行机制以及`this`的指向有关。本文将详细讲解如何解决Vue中在`...

    setTimeout和setInterval的区别

    需要注意的是,使用`setInterval`时,由于JavaScript的事件循环机制,如果执行时间超过设定的间隔时间,可能导致多个回调函数同时执行,造成所谓的“堆积”。因此,在处理耗时任务时,通常建议使用`setTimeout`来...

    js中settimeout方法加参数的使用实例.docx

    例如,如果一个循环创建多个`setTimeout`,它们都引用同一个变量,那么在所有定时器触发时,它们看到的将是循环结束时的变量值,而不是各自循环迭代时的值。这是因为在JavaScript中,变量的作用域是函数级的,而不是...

    16-WebAPI:setTimeout是如何实现的?_For_vip_user_0011

    【描述】:本文将探讨JavaScript中的setTimeout函数在浏览器环境下的实现原理,以及它与事件循环系统的关系。 【标签】:c# 【部分内容】: 在JavaScript中,setTimeout是一个非常常见的异步功能,用于设定一个函数...

Global site tag (gtag.js) - Google Analytics