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 编写匿名函数的几种方法
Feb 21 Javascript
JQuery为textarea添加maxlength属性的代码
Apr 07 Javascript
JS中使用Array函数shift和pop创建可忽略参数的例子
May 28 Javascript
jquery 实现两Select 标签项互调示例代码
Sep 25 Javascript
javascript学习笔记(一)基础知识
Sep 30 Javascript
ES6中如何使用Set和WeakSet
Mar 10 Javascript
js实现股票实时刷新数据案例
May 14 Javascript
JS二分查找算法详解
Nov 01 Javascript
JavaScript:ES2019 的新特性(译)
Aug 08 Javascript
vue实现div单选多选功能
Jul 16 Javascript
JavaScript实现网页跨年倒计时
Dec 02 Javascript
JS监听Esc 键触发事键
Apr 14 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创建PDF中文文档
2006/10/09 PHP
php变量作用域的深入解析
2013/06/03 PHP
PHP获取栏目的所有子级和孙级栏目的ID号示例
2014/04/01 PHP
destoon出现验证码不显示时的紧急处理方法
2014/08/22 PHP
PHP获取当前页面URL函数实例
2014/10/22 PHP
PHP易混淆知识整理笔记
2015/09/24 PHP
PHP 微信扫码支付源代码(推荐)
2016/11/03 PHP
thinkphp中的多表关联查询的实例详解
2017/10/12 PHP
php 判断IP为有效IP地址的方法
2018/01/28 PHP
PHP如何防止用户重复提交表单
2020/12/09 PHP
jquery 学习笔记 传智博客佟老师附详细注释
2020/09/12 Javascript
js 图片随机不定向浮动的实现代码
2013/07/02 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
使用RequireJS优化JavaScript引用代码的方法
2015/07/01 Javascript
js实现3D图片逐张轮播幻灯片特效代码分享
2015/09/09 Javascript
简单谈谈Javascript中类型的判断
2015/10/19 Javascript
详解Jquery实现ready和bind事件
2016/04/14 Javascript
JavaScript地理位置信息API
2016/06/11 Javascript
浅谈jquery.form.js的ajaxSubmit和ajaxForm的使用
2016/09/09 Javascript
vue-cli 2.*中导入公共less文件的方法步骤
2018/11/22 Javascript
微信小程序分享海报生成的实现方法
2018/12/10 Javascript
JavaScript实现连连看连线算法
2019/01/05 Javascript
vue自定义标签和单页面多路由的实现代码
2020/05/03 Javascript
vue实现点击出现操作弹出框的示例
2020/11/05 Javascript
Vue.extend 登录注册模态框的实现
2020/12/29 Vue.js
vue 实现图片懒加载功能
2020/12/31 Vue.js
使用python装饰器验证配置文件示例
2014/02/24 Python
django利用request id便于定位及给日志加上request_id
2018/08/26 Python
pycharm 配置远程解释器的方法
2018/10/28 Python
python中PS 图像调整算法原理之亮度调整
2019/06/28 Python
详解python列表(list)的使用技巧及高级操作
2019/08/15 Python
在tensorflow中实现去除不足一个batch的数据
2020/01/20 Python
python 实现分组求和与分组累加求和代码
2020/05/18 Python
加拿大著名的奢侈品购物网站:SSENSE(支持中文)
2020/06/25 全球购物
教师作风整改措施思想汇报
2014/10/12 职场文书
党员反四风学习心得体会
2016/01/22 职场文书