`
axl234
  • 浏览: 266303 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

扩展:为setInterval(setTimeout)传递参数

 
阅读更多

无论是window.setTimeout还是window.setInterval,在使用函数名作为调用句柄时都不能带参数,而在许多场合必须要带参数,这就需要想方法解决。经网上查询后整理如下:

例如对于函数hello(_name),它用于针对用户名显示欢

迎信息:
var userName="jack";
//根据用户名显示欢迎信息
function hello(_name){
alert("hello,"+_name);
}
这时,如果企图使用以下语句来使hello函数延迟3秒执行是不可行的:
window.setTimeout(hello(userName),3000);

这将使hello函数立即执行,并将返回值作为调用句柄传递给setTimeout函数,其结果并不是程序需要的。

而使用字符串形式可以达到想要的结果:
1:window.setTimeout("hello(userName)",3000);
这里的字符串是一段JavaScript代码,其中的userName表示的是变量。但这种写法不够直观,而且有些场合必须使用函数名,于是有人想到了如下方法

2:var userName="jack";
//根据用户名显示欢迎信息
function hello(_name){
alert("hello,"+_name);
}
//创建一个函数,用于返回一个无参数函数
function _hello(_name){
returnfunction(){
hello(_name);
}
}
window.setTimeout(_hello(userName),3000);

这 里定义了一个函数_hello,用于接收一个参数,并返回一个不带参数的函数,在这个函数内部使用了外部函数的参数,从而对其调用,不需要使用参数。在 window.setTimeout函数中,使用_hello(userName)来返回一个不带参数的函数句柄,从而实现了参数传递的功能。

 

3:function doSomething(_name){   
    return (function(){       
        alert("hello,"+_name);
    });
}

var functRef = doSomething("jack"); 
setTimeout(functRef, 500);

 

另外也有人通过修改settimeout、setInterval来实现。即下面的

4:

var userName="jack";
//根据用户名显示欢迎信息
function hello(_name){
alert("hello,"+_name);
}//*=============================================================
//*   功能: 修改 window.setInterval ,使之可以传递参数和对象参数   
//*   方法: setInterval (回调函数,时间,参数1,,参数n)  参数可为对象:如数组等
//*=============================================================

var __sto = setInterval;    
window.setInterval = function(callback,timeout,param){    
var args = Array.prototype.slice.call(arguments,2);    
var _cb = function(){    
callback.apply(null,args);    
}    
__sto(_cb,timeout);    
}
window.setInterval(hello,3000,userName);

分享到:
评论

相关推荐

    JS中setInterval、setTimeout不能传递带参数的函数的解决方案

    如果想要保留原生`setInterval`的行为,可以对其进行扩展以支持传递额外参数。例如: ```javascript function foo(id) { alert(id); } var _sto = setInterval; window.setInterval = function(callback, ...

    setInterval,setTimeout与jquery混用的问题

    在这里,我们直接传递`show`函数作为`setInterval`的第一个参数,而不是它的字符串表示,这样`setInterval`就能正确地调用该函数。 总结一下,当`setInterval`和`setTimeout`与jQuery混用时,需要注意以下几点: ...

    关于setInterval、setTimeout在jQuery中的使用注意事项

    比如,要向名为fn的函数传递参数para,正确的做法是使用setInterval(function(){fn(para)}, 2000)。 第二种传参的错误示例是直接在字符串中进行拼接。例如,尝试这样写setInterval("$.a("+$start+")", 2000),导致...

    Jquery中使用setInterval和setTimeout的方法

    然而,需要注意的是,在使用 `setInterval` 或 `setTimeout` 时,尽量避免将函数名用引号包裹,因为这会导致JavaScript将其解释为字符串而非函数引用。如"方法2"所示,正确的方式是直接传递函数名,不加引号和括号:...

    firefox扩展插件制作小综合

    了解如何使用`setTimeout`和`setInterval`进行定时任务,或者使用`Promise`和`async/await`处理异步操作,都是JavaScript编程的基础。 6. **扩展插件例子**:实践是检验理论的最好方式。通过分析和模仿现有的Fire...

    jQuery中setTimeout的几种使用方法小结

    在原生JavaScript中,`setTimeout`的基本用法是传递一个字符串或者函数作为第一个参数,表示要在指定延迟后执行的代码,第二个参数是延迟时间(以毫秒计)。例如: ```javascript function funA() { log('funA...'...

    jQuery setTimeout()函数使用方法

    当函数需要参数时,可以使用匿名函数来包裹需要执行的函数,这样可以在`setTimeout`中传递参数。例如: ```javascript function funC(v) { log('funC...' + v); setTimeout(function() { funC(v + 1); }, 1000)...

    基于video.js扩展组件,实现video倒计时、滚动公告、播放器刷新按钮等扩展组件

    实现这一功能可能涉及到JavaScript的定时器(setTimeout或setInterval)以及与Video.js事件系统的集成,以便在倒计时结束后触发相应的操作。 2. **滚动公告**:滚动公告是播放器上方或下方显示的一条可滚动文本信息...

    必会的JS实例(JS实战全集)

    - 函数作为一等公民,可作为参数传递,也可作为返回值。 - 闭包允许函数访问并操作其外部作用域的变量,常用于封装和数据隔离。 9. **正则表达式**: - 正则表达式用于字符串匹配和搜索,如`match`、`test`、`...

    javascript秒数倒计时自动跳转代码.docx

    1. **动态参数配置**:允许用户通过URL参数或其他方式传递倒计时的时间。 2. **兼容性处理**:考虑到不同浏览器对API的支持情况,增加兼容性处理。 3. **样式美化**:通过CSS来美化倒计时显示的文字样式。 4. **错误...

    WindowTimers:用于扩展 JavaScriptCore 的 JavaScript WindowTimers 的实现

    WTWindowTimer 在 iOS 7 中,Apple 引入了[通过 ...该库尝试实现窗口计时器的完整规范,包括将字符串作为第一个参数传递给setTimeout或setInterval或将附加参数传递给上述两个函数。 如何使用它 创建WTWindowTimers

    前端十年经验 - JavaScript基础知识大纲-思维构图.pdf

    - 定时器和延时函数:如setTimeout和setInterval。 - Ajax请求和跨域问题:处理服务器通信和解决跨域限制。 8. ES6新特性: - let和const关键字:新的变量声明方式,提供了更好的作用域管理。 - 箭头函数:简洁...

    js代码-函数作为参数

    - 动画和定时任务:`setTimeout`和`setInterval`函数也接受函数作为参数,定义了延迟执行或周期性执行的任务。 4. 箭头函数的应用: 箭头函数是ES6引入的新语法,它提供了更简洁的函数定义方式。由于箭头函数没有...

    每个JavaScript开发人员应该知道33个概念

    26. 计时器(Timers):如setTimeout和setInterval,用于延迟或周期性执行代码。 27. 模块(Modules):ES6引入模块系统,通过import和export进行导入导出。 28. 错误处理(Error Handling):try...catch用于捕获...

    Javascript试卷答案

    3. 函数:理解函数的定义、调用、参数传递以及函数表达式和匿名函数的概念。 4. 作用域:知道全局作用域和局部作用域,以及块级作用域(let关键字引入)的区别。 5. 事件处理:理解DOM事件和事件处理机制,如...

    程序员的表白

    3. **定时器**:使用`setTimeout`或`setInterval`控制代码执行的时机,如延迟显示信息,模拟心跳效果。 4. **CSS3动画**:借助JS改变元素的CSS样式,配合CSS3的`transition`或`animation`属性,实现平滑过渡和复杂...

Global site tag (gtag.js) - Google Analytics