首页 教程资源正文

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

娜迦源码 教程资源 2019-04-06 00:05:51 377 0 教程资源

在JS中无论是setTimeout还是setInterval,在使用函数名作为调用句柄时都不能带参数,而在许多场合必须要带参数, 
这就需要想方法解决。 
一、采用字符串形式:——(缺陷)参数不能被周期性改变 
setInterval("foo(id)",1000); 
二、匿名函数包装 (推荐) 
复制代码 代码如下: 

window.setInterval(function() 

foo (id); 
}, 1000); 


这样就可以周期性执行foo(id)这个函数,而且把变量id传递进去; 
三、定义返回无参函数的函数 
复制代码 代码如下: 

function foo(id) 

alert(id); 

function _foo(id) 

return function() 

foo(id); 


window.setInterval(_foo(id),1000); 


这里定义了一个函数_foo,用于接收一个参数,并返回一个不带参数的函数,在这个函数内部使用了外部函数的参数,从而对其调用,不需要使用参数。 
在 window. setInterval函数中,使用_foo(id)来返回一个不带参数的函数句柄,从而实现了参数传递的功能。 
四、修改setInterval 
复制代码 代码如下: 

function foo(id) 

alert(id); 

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); 


以上的所有方法也适合setTimeout。 

版权声明

1:如非特殊说明,本站对提供的源码不拥有任何权利,其版权归原著者拥有。

2:请勿将该源码、软件进行商业交易、转载等行为,该源码、软件只为研究、学习所提供,该软件使用后发生的一切问题与本站无关。

3:本网站所有源码和软件均为作者提供和网友推荐收集整理而来,仅供学习和研究使用。如有侵犯你版权的,请来信(邮箱:393249296@qq.com)指出,本站将立即改正。

本文链接:https://www.wsx6.cn/post/1031.html

分享:

支付宝

微信

嘿,我是客服
请先 登录 再评论,若不是会员请先 注册