无论是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);
分享到:
相关推荐
setInterval setTimeout.html
/****************************************************** // // 功能: 修改window.setTimeout,使之可以传递参数和对象参数 // 使用方法: window.setTimeout(回调函数,延迟时间,参数1,参数n) // ******************...
这是我们常常会使用方法setInterval或setTimeout,但是由于这两个方法是由脚本宿主模拟出来的Timer线程,在通过其调用我们的方法是不能为其传递参数。 我们常用的使用场景是: 代码如下:window.setTimeout(...
小程序中有两个定时器:setTimeout与setInterval setTimeout:可延时回调 setInterval:可定时循环回调 第一次这样使用: setTimeout(function(){ console.log(延时1秒回调) },1000) setInterval(function(){ ...
setTimeout 描述 setTimeout(code,millisec) setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。 注:调用过程中,可以使用clearTimeout(id_of_settimeout)终止 参数 描述 code 必需,要调用的...
在JS中无论是setTimeout还是setInterval,在使用函数名作为调用句柄时都不能带参数,而在许多场合必须要带参数, 这就需要想方法解决。 一、采用字符串形式:——(缺陷)参数不能被周期性改变 setInterval(“foo(id...
使用SetInterval和设定延时函数setTimeout 很类似。setTimeout 运用在延迟一段时间,再进行某项操作。
Javascript定时器(二)——setTimeout与setInterval 在 http://www.cnblogs.com/strick/p/3983904.html 有说明
更好的间隔 您可以使用递归 setTimeout 代替本机 setInterval。 在此处阅读更多信息: :
关于JS定时器(setTimeout setInterval)定时不准问题1
它们都有两个参数,一个是将要执行的代码字符串,还有一个是以毫秒为单位的时间间隔,当过了那个时间段之后就将执行那段代码。不过这两个函数还是有区别的,setInterval在执行完一次代码之后,经过了那个固定的时间...
NULL 博文链接:https://rainbow702.iteye.com/blog/1668935
定时器setTimeout和setInterval函数的扩展作者主页: : 当前版本v1.0.0 12/Sep/2015错误和增强功能(下一个版本)发行历史版本号日期v1.0.0 12/Sep/2015依存关系目前,此插件没有依赖项如何使用语法范例<...
setInterval是setTimeout,而requestAnimationLoop是requestAnimationFrame。 安装 npm install request-animation-loop --save 例子 旋转一个元素1秒钟。 var deg = 0 ; var id = requestAnimationLoop ( ...
JS中的setTimeout和setInterval的区别JS中的setTimeout和setInterval的区别JS中的setTimeout和setInterval的区别
js 代码中执行循环事件时,经常会用到 setInterval 和 setTimeout 这两个方法,关于这两个方法的细节这里不详细讨论了,简要分享下在需要停止循环事件的时候该如何操作。 (1)setInterval 方法可按照指定的周期(以...
clearInterval() 函数的参数即 setInterval() 返回的 ID 值。 语法 setInterval(code,millisec[,”lang”])code 必需。要调用的函数或要执行的代码串。millisec 必须。周期性执行或调用 code 之间的时间间隔,以毫秒...
详细讲解SetInterval与setTimeout的区别和用法
应用jQuery的扩展可以解决这个问题。 代码如下:$(document).ready(function(){$.extend({ show:function(){ alert(“ready”); }});setInterval(“show()”,3000);});方法2. 指定定时执行的函数时不要...