一、需求描述
如“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 在JavaScript中,setTimeout和setInterval是两个基本的定时器函数,用于实现延迟执行或循环执行某个函数。然而,这两个函数在执行时往往和我们设置的延迟时间...
在JavaScript编程中,`setTimeout()`和`setInterval()`是两个非常关键的函数,它们用于实现异步编程,特别是在处理动画、定时任务或者延迟执行代码时不可或缺。这两个函数都是全局对象`window`的方法,它们的区别...
2. **延时更新**:如果导航栏包含实时信息,如天气、新闻或股票数据,`setTimeout`可以用来定期更新这些信息,避免过于频繁的请求导致性能问题。 3. **交互响应**:用户与导航栏交互时,例如鼠标悬停在某个链接上,...
问题的根本在于模态对话框创建了一个新的事件循环,这个新的循环会在对话框关闭之前不会执行。因此,即使`setTimeout`的时间已经过去,其回调函数也不会在对话框打开期间执行。这在处理异步操作、动画效果或者期望的...
解决循环中setTimeout执行顺序的问题 本文旨在解决JavaScript中的循环中setTimeout执行顺序的问题,并提供了多种解决方法。 知识点一:setTimeout的执行顺序 在JavaScript中,setTimeout函数可以使得函数延迟执行...
最近在翻看以前的老书《node.js开发指南》,恰好碰到 for 循环 + setTimeout 的经典例子,于是重新梳理了思路并记录下。 二、写在前面,setTimeout 和 setInterval 的执行机制 在日常编码中,你会发现,给 ...
在处理某些特定问题时,如防止循环超时,`setTimeout`能展现出其独特的价值。本文将深入探讨如何利用`setTimeout`来防止循环超时,特别是当遇到耗时操作时,如大数组的处理或服务器请求。 首先,我们需要了解...
在JavaScript中,死循环可能通过事件监听、定时器(如setTimeout或setInterval)或其他异步操作不当触发。例如,一个永不完成的定时器任务会不断调用函数,形成死循环。 7. 性能优化:在发现死循环后,可以通过调整...
2. 在闭包中使用setTimeout时需要注意变量作用域问题,以及避免因循环过快而导致的问题。 3. 要注意递归的setTimeout可能会阻塞事件队列,影响页面响应。 综上所述,setTimeout是JavaScript中非常重要的一个功能,...
尽管`setTimeout(func, 0)`在很多情况下能帮助我们解决异步问题,但过度使用可能导致性能下降,因为每次调用都会增加事件循环的负担。同时,由于其依赖于事件循环,执行顺序可能并不确定,因此在编写依赖于特定执行...
本文主要探讨了`setTimeOut`定时器在微信小程序中的应用和一些常见问题。`setTimeOut`是JavaScript中的一个基础功能,用于在指定的延迟时间后执行某段代码,这对于实现定时任务至关重要。 微信小程序提供了两种定时...
// 初始调用以启动循环 setTimeout(repeatMessage, 2000); ``` #### 设定条件使setTimeout()停止 在实际应用中,我们可能需要在某个条件下停止执行`setTimeout()`,这时可以使用`clearTimeout()`函数。它需要一个`...
JavaScript中的`setTimeout`函数在处理耗时操作时有一个巧妙的应用,即防止循环超时,确保浏览器不会因长时间运行的任务而假死。这个概念主要源于JavaScript的单线程特性,即同一时间只能执行一个任务。当遇到如向...
然而,一个常见的问题是在尝试使用`setTimeout()`调用带参数的函数时,参数往往无法正确传递。这是因为`setTimeout()`默认只接受一个函数引用和一个延迟时间作为参数,而不直接支持传递额外的参数。这个问题可以通过...
#### 三、循环中的`setTimeout`与闭包问题 当在循环中使用`setTimeout`时,需要注意闭包问题。如果处理不当,可能会导致预期之外的结果。例如,在下面的例子中,虽然希望每个定时器都能输出对应的索引值,但实际上...
在Vue.js开发过程中,有时会遇到在`setTimeout`函数内部修改组件状态(如变量)时,预期的效果并未体现出来,这个问题通常与JavaScript的异步执行机制以及`this`的指向有关。本文将详细讲解如何解决Vue中在`...
需要注意的是,使用`setInterval`时,由于JavaScript的事件循环机制,如果执行时间超过设定的间隔时间,可能导致多个回调函数同时执行,造成所谓的“堆积”。因此,在处理耗时任务时,通常建议使用`setTimeout`来...
例如,如果一个循环创建多个`setTimeout`,它们都引用同一个变量,那么在所有定时器触发时,它们看到的将是循环结束时的变量值,而不是各自循环迭代时的值。这是因为在JavaScript中,变量的作用域是函数级的,而不是...
【描述】:本文将探讨JavaScript中的setTimeout函数在浏览器环境下的实现原理,以及它与事件循环系统的关系。 【标签】:c# 【部分内容】: 在JavaScript中,setTimeout是一个非常常见的异步功能,用于设定一个函数...