js setTimeout 参数传递使用介绍


Posted in Javascript onAugust 13, 2013

window.settimeout()方法要调用带参数的函数有两种方法:
1.

function init(){ 
var url = "<%=basePath%>fetchwater.do?method=searchRealWater&xzqh=" + "<%=xzqh%>" + "&rand="+Math.random(); 
//alert(url); 
window.setTimeout(function(){ searchJDWater(url);},100); 
}

2.
function init(){ 
var url = "<%=basePath%>fetchwater.do?method=searchRealWater&xzqh=" + "<%=xzqh%>" + "&rand="+Math.random(); 
//alert(url); 
window.setTimeout(“searchJDWater(”+url+“)”, 100); 
}

注意: 带参数方法使用setTimeout要注意,setTimeout("函数名("+参数+")",毫秒数),这里的参数只能是字符串形式的,而不能传递一个对象
---------------------------
以下的方法是错误的,而且浏览器状态栏会提示参数无效:
function init(){ 
var url = "<%=basePath%>fetchwater.do?method=searchRealWater&xzqh=" + "<%=xzqh%>" + "&rand="+Math.random(); 
//alert(url); 
window.setTimeout(searchJDWater(url), 100); 
}

--------------------------------------------------------------
settimeout()函数扩展:
网上很多朋友也在问此类问题,我在此说明下,以下我举几个个简单的例子:

网上查找下“带参数 setTimeout”,很多朋友写了很多方法来实现使用setTimeout带对象的方法循环,例如:

<script language="javascript"> 

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 aaaa(a) 

{ 

alert(a); 

} 

function aaaaa(a,b,c) 

{ 

alert(a + b + c); 

} 

var a = new Object(); 

window.setTimeout(aaaa,1000,a); 

window.setTimeout(aaaaa,2000,a,6,7); 

</script>

此例中,setTimeout用法,setTimeout(回调函数,时间,参数1,...,参数n)。

又例如:

2:

<script type="text/javascript"> 

var _st = window.setTimeout; 

window.setTimeout = function(fRef, mDelay) { 

if(typeof fRef == 'function'){ 

var argu = Array.prototype.slice.call(arguments,2); 

var f = (function(){ fRef.apply(null, argu); }); 

return _st(f, mDelay); 

} 

return _st(fRef,mDelay); 

} 

function test(x){ 

alert(x); 

} 

window.setTimeout(test,1000,'fason'); 

</script>

此例中,重载了一下window.setTimeout,用apply去回调前面的function。

例1:

<script language="javascript"> 

function test(obj) 

{ 

alert(obj); 

setTimeout("test("+ obj +")",1000); 

} 

</script> 

<input id="testButton" type="button" onclick="test(1)">

当鼠标按下此按钮时调用test(),将"1"传递进去,屏幕上每隔1000毫秒(1秒)弹出一次对话框,显示1,没问题。

例2:

<script language="javascript"> 

function test(obj) 

{ 

alert(obj); 

setTimeout("test("+ obj +")",1000); 

} 

</script> 

<input id="btnTest" type="button" onclick="test(this)">

这里的this可以当做document.getElementById("btnTest")来理解,当鼠标按下此按钮时向test函数传递的是一个对象,屏幕显示[object],

1000毫秒之后不再显示第二次。问题来了,浏览器左下报脚本错误,详细信息里显示object未定义。

例3:

<script language="javascript"> 

function test(obj) 

{ 

alert(obj); 

setTimeout("test()",1000); 

} 

</script> 

<input id="testButton" type="button" onclick="test(this)">

setTimeout里的test()没带参数,第一次显示[object],1000毫秒之后显示undefined,变量尚未赋值,也就是说用此方式可以实现带参数的方

法循环,但是参数被销毁。

其实这很简单就可以实现,不必写那么长的代码来实现。

例4:

<script language="javascript"> 

function test(obj) 

{ 

alert(obj); 

setTimeout("test('"+ obj +"')",1000); 

} 

</script> 

<input id="testButton" type="button" onclick="test(this)">

注意,setTimeout里的test中的参数obj前后的引号,在双引号内有一对单引号,这样:setTimeout("test(单引号双引号+obj+双引号单引

号)"),行了吧~每隔1000毫秒屏幕显示一次[object],传递对象成功。

———————————————————————————————————————

疑义:第4条 最终传走的是“对象”的字符串“object” 而不是初始的对象obj。只是obj的类型而已。并没有达到传递对象的作用。

可以测试一下代码: 弹出传来对象的id

<body> 

<div id="sssss"></div> 

</body> 

<script language="javascript"> 

obj=document.getElementById('sssss'); 

function test(obj) 

{ 

alert(obj.id); 

setTimeout("test('"+ obj +"')",1000); 

} 

test(obj) 

</script>
Javascript 相关文章推荐
JavaScript 设计模式学习 Singleton
Jul 27 Javascript
JavaScript DOM 学习第三章 内容表格
Feb 19 Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
Dec 27 Javascript
jquery ajax 局部无刷新更新数据的实现案例
Feb 08 Javascript
在Node.js中使用Javascript Generators详解
May 05 Javascript
JavaScript实现同一个页面打开多张图片
Dec 29 Javascript
移动设备手势事件库Touch.js使用详解
Aug 18 Javascript
vue  directive定义全局和局部指令及指令简写
Nov 20 Javascript
使用Vue实现移动端左滑删除效果附源码
May 16 Javascript
vue v-for 使用问题整理小结
Aug 04 Javascript
使用Vue实现简单计算器
Feb 25 Javascript
JS实现瀑布流效果
Mar 07 Javascript
js setTimeout 常见问题小结
Aug 13 #Javascript
删除select中所有option选项jquery代码
Aug 12 #Javascript
js获取本机的外网/广域网ip地址完整源码
Aug 12 #Javascript
JavaScript解析URL参数示例代码
Aug 12 #Javascript
JS实现Enter键跳转及控件获得焦点
Aug 12 #Javascript
获取数组中最大最小值方法js代码(自写)
Aug 12 #Javascript
使用js对select动态添加和删除OPTION示例代码
Aug 12 #Javascript
You might like
解析php中heredoc的使用方法
2013/06/17 PHP
PHP根据IP判断地区名信息的示例代码
2014/03/03 PHP
php通过array_merge()函数合并关联和非关联数组的方法
2015/03/18 PHP
Alliance vs AM BO3 第二场2.13
2021/03/10 DOTA
Javascript 实现TreeView CheckBox全选效果
2010/01/11 Javascript
Javascript 网页水印(非图片水印)实现代码
2010/03/01 Javascript
javascript写的日历类(基于pj)
2010/12/28 Javascript
JavaScript起点(严格模式深度了解)
2013/01/28 Javascript
解决js中window.open弹出的是上次的缓存页面问题
2013/12/29 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2014/09/04 Javascript
jquery uploadify 在FF下无效的解决办法
2014/09/26 Javascript
nodejs 提示‘xxx’ 不是内部或外部命令解决方法
2014/11/20 NodeJs
js实现右下角提示框的方法
2015/02/03 Javascript
JS函数this的用法实例分析
2015/02/05 Javascript
three.js实现围绕某物体旋转
2017/01/25 Javascript
AngularJS $http模块POST请求实现
2017/04/08 Javascript
jQuery zTree搜索-关键字查询 递归无限层功能实现代码
2018/01/25 jQuery
element-ui表格合并span-method的实现方法
2019/05/21 Javascript
解决Layui 表格自适应高度的问题
2019/11/15 Javascript
JS实现按比例缩小图片宽高
2020/08/24 Javascript
微信小游戏中three.js离屏画布的示例代码
2020/10/12 Javascript
paramiko模块安装和使用(远程登录服务器)
2014/01/27 Python
python使用wxpy轻松实现微信防撤回的方法
2019/02/21 Python
python画图把时间作为横坐标的方法
2019/07/07 Python
基于Python中isfile函数和isdir函数使用详解
2019/11/29 Python
python -v 报错问题的解决方法
2020/09/15 Python
HTML5打开本地app应用的方法
2016/03/31 HTML / CSS
h5封装下拉刷新
2020/08/25 HTML / CSS
市政管理求职信范文
2014/05/07 职场文书
2014教师党员自我评议总结
2014/09/19 职场文书
机修车间主任岗位职责
2015/04/08 职场文书
行政复议答复书
2015/07/01 职场文书
高中数学教学反思范文
2016/02/18 职场文书
go web 预防跨站脚本的实现方式
2021/06/11 Golang
Pytest中skip和skipif的具体使用方法
2021/06/30 Python
python解析照片拍摄时间进行图片整理
2022/07/23 Python