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 相关文章推荐
XML+XSL 与 HTML 两种方案的结合
Apr 22 Javascript
xml和web特殊字符
Apr 28 Javascript
ExtJS 2.0实用简明教程 之Ext类库简介
Apr 29 Javascript
Javascript非构造函数的继承
Apr 27 Javascript
JavaScript实现点击单元格改变背景色的方法
Feb 12 Javascript
详解Javascript继承的实现
Mar 25 Javascript
jQuery实现隔行变色的方法分析(对比原生JS)
Nov 18 Javascript
简单易懂的天气插件(代码分享)
Feb 04 Javascript
vue axios同步请求解决方案
Sep 29 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
Nov 17 Javascript
解决vue中监听input只能输入数字及英文或者其他情况的问题
Aug 30 Javascript
vue使用wavesurfer.js解决音频可视化播放问题
Apr 04 Vue.js
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
CURL的学习和应用(附多线程实现)
2013/06/03 PHP
PHP APC的安装与使用详解
2013/06/13 PHP
php表单处理操作
2017/11/16 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
2020/08/06 PHP
Javascript与vbscript数据共享
2007/01/09 Javascript
可以支持多中格式的JS键盘
2007/05/02 Javascript
js实现特定位取反原理及示例
2014/06/30 Javascript
js函数与php函数的区别实例浅析
2015/01/12 Javascript
Juery解决tablesorter中文排序和字符范围的方法
2015/05/06 Javascript
JavaScript中length属性的使用方法
2015/06/05 Javascript
JS+CSS实现分类动态选择及移动功能效果代码
2015/10/19 Javascript
MVC+jQuery.Ajax异步实现增删改查和分页
2020/12/22 Javascript
JS实现的RGB网页颜色在线取色器完整实例
2016/12/21 Javascript
ES6中Math对象的部分扩展
2017/02/20 Javascript
浅谈jQuery框架Ajax常用选项
2017/07/08 jQuery
一文了解Vue中的nextTick
2019/05/06 Javascript
vue实现分页栏效果
2019/06/28 Javascript
VScode格式化ESlint方法(最全最好用方法)
2019/09/10 Javascript
JavaScript文档加载模式以及元素获取
2020/07/28 Javascript
JavaScript实现雪花飘落效果
2020/12/27 Javascript
[00:33]2018DOTA2亚洲邀请赛TNC出场
2018/04/04 DOTA
python 实现文件的递归拷贝实现代码
2012/08/02 Python
教你如何将 Sublime 3 打造成 Python/Django IDE开发利器
2014/07/04 Python
使用Python的PIL模块来进行图片对比
2016/02/18 Python
Python实现的微信好友数据分析功能示例
2018/06/21 Python
中国宠物用品商城:E宠商城
2016/08/27 全球购物
main 函数执行以前,还会执行什么代码
2013/04/17 面试题
c/c++某大公司的两道笔试题
2014/02/02 面试题
Android interview questions
2016/12/25 面试题
外包公司软件测试工程师
2014/11/01 面试题
北大研究生linux应用求职信
2013/10/29 职场文书
工作自荐信
2013/12/11 职场文书
高三家长寄语
2014/04/03 职场文书
如何写辞职书
2015/02/26 职场文书
如何撰写促销方案?
2019/07/05 职场文书