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 异步加载详解(浏览器在javascript的加载方式)
May 20 Javascript
删除javascript所创建子节点的方法
May 21 Javascript
jQuery+css3实现Ajax点击后动态删除功能的方法
Aug 10 Javascript
JS+CSS实现的蓝色table选项卡效果
Oct 08 Javascript
jQuery获取某天的农历日期并判断是否除夕或新年的方法
Mar 01 Javascript
JS实现点击网页判断是否安装app并打开否则跳转app store
Nov 18 Javascript
jQuery 实现倒计时天,时,分,秒功能
Jul 31 jQuery
浅谈Webpack核心模块tapable解析
Sep 11 Javascript
jQuery Migrate 插件用法实例详解
May 22 jQuery
js实现自动播放匀速轮播图
Feb 06 Javascript
ng-alain的sf如何自定义部件的流程
Jun 12 Javascript
js动态生成表格(节点操作)
Jan 12 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执行速度全攻略(上)
2006/10/09 PHP
利用PHP动态生成VRML网页
2006/10/09 PHP
php 多线程上下文中安全写文件实现代码
2009/12/28 PHP
一些被忽视的PHP函数(简单整理)
2010/04/30 PHP
Yii扩展组件编写方法实例分析
2015/06/29 PHP
CodeIgniter记录错误日志的方法全面总结
2016/05/17 PHP
Laravel5.7 数据库操作迁移的实现方法
2019/04/12 PHP
JavaScript的Cookies
2008/01/16 Javascript
基于jQuery实现左右div自适应高度完全相同的代码
2012/08/09 Javascript
js数组依据下标删除元素
2015/04/14 Javascript
详解JS面向对象编程
2016/01/24 Javascript
JS中frameset框架弹出层实例代码
2016/04/01 Javascript
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
2017/03/04 Javascript
实现jquery放大镜的两种方法
2018/02/22 jQuery
微信小程序 Animation实现图片旋转动画示例
2018/08/22 Javascript
JS实现的贪吃蛇游戏完整实例
2019/01/18 Javascript
微信小程序开发技巧汇总
2019/07/15 Javascript
JavaScript面向对象程序设计中对象的定义和继承详解
2019/07/29 Javascript
Angular+Ionic使用queryParams实现跳转页传值的方法
2020/09/05 Javascript
wxPython窗口中文乱码解决方法
2014/10/11 Python
九步学会Python装饰器
2015/05/09 Python
Python正则表达式完全指南
2017/05/25 Python
python用户管理系统
2018/03/13 Python
Python实现的求解最小公倍数算法示例
2018/05/03 Python
关于Python3 类方法、静态方法新解
2019/08/30 Python
win10安装python3.6的常见问题
2020/07/01 Python
详解python中的lambda与sorted函数
2020/09/04 Python
虚拟环境及venv和virtualenv的区别说明
2021/02/05 Python
html5使用canvas画空心圆与实心圆
2014/12/15 HTML / CSS
aden + anais官方网站:婴儿襁褓、毯子、尿布和服装
2017/06/21 全球购物
SQL SERVER面试资料
2013/03/30 面试题
linux下进程间通信的方式
2013/01/23 面试题
护理专业毕业生推荐信
2013/10/31 职场文书
《盘古开天地》教学反思
2014/02/28 职场文书
2015年客房服务员工作总结
2015/05/15 职场文书
利用python调用摄像头的实例分析
2021/06/07 Python