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获取当前日期时间及其它操作函数
Jan 11 Javascript
javascript确认框的三种使用方法
Dec 17 Javascript
jquery获取多个checkbox的值异步提交给php
Jul 07 Javascript
JS实现浏览器状态栏显示时间的方法
Oct 27 Javascript
基于JavaScript实现根据手机定位获取当前具体位置(X省X市X县X街道X号)
Dec 29 Javascript
javascript实现可键盘控制的抽奖系统
Mar 10 Javascript
利用bootstrapValidator验证UEditor
Sep 14 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
Oct 10 Javascript
jQuery实现手机上输入后隐藏键盘功能
Jan 04 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
Jun 18 Javascript
详解vue为什么要求组件模板只能有一个根元素
Jul 22 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
Dec 04 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原理的opcodes(操作码)
2010/10/26 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
2011/10/29 PHP
php使用cookie实现记住用户名和密码实现代码
2015/04/27 PHP
PHP实现打包下载文件的方法示例
2017/10/07 PHP
限制复选框的最大可选数
2006/07/01 Javascript
原生Js实现元素渐隐/渐现(原理为修改元素的css透明度)
2013/06/24 Javascript
javascript日期对象格式化为字符串的实现方法
2014/01/14 Javascript
Js获取下拉框选定项的值和文本的实现代码
2014/02/26 Javascript
使用JS+plupload直接批量上传图片到又拍云
2014/12/01 Javascript
如何编写高质量JS代码(续)
2015/02/25 Javascript
javascript实现自动输出文本(打字特效)
2015/08/27 Javascript
原生js封装自定义滚动条
2017/03/24 Javascript
微信小程序如何获知用户运行小程序的场景教程
2017/05/17 Javascript
JS FormData上传文件的设置方法
2017/07/05 Javascript
es6学习之解构时应该注意的点
2017/08/29 Javascript
微信小程序富文本渲染引擎的详解
2017/09/30 Javascript
JavaScript实现简单计算器功能
2019/12/19 Javascript
[02:43]2018DOTA2亚洲邀请赛主赛事首日TOP5
2018/04/04 DOTA
python超简单解决约瑟夫环问题
2015/05/12 Python
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
2016/10/12 Python
python抽取指定url页面的title方法
2018/05/11 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
2019/06/12 Python
使用 Python 清理收藏夹里已失效的网站
2019/12/03 Python
Pytorch之parameters的使用
2019/12/31 Python
使用Puppeteer爬取微信文章的实现
2020/02/11 Python
python模拟斗地主发牌
2020/04/22 Python
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
英国领先的杂志订阅网站:Magazine.co.uk
2018/01/25 全球购物
年度考核自我鉴定
2013/11/09 职场文书
行政办公室岗位职责
2014/03/18 职场文书
金融与证券专业求职信
2014/06/22 职场文书
个人融资协议书范本两则
2014/10/15 职场文书
2014年安全工作总结范文
2014/11/13 职场文书
2014年学校团委工作总结
2014/12/20 职场文书
本科毕业论文答辩稿
2015/06/23 职场文书
受欢迎的自荐信,就这么写!
2019/04/19 职场文书