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 相关文章推荐
js验证是否为数字的总结
Apr 14 Javascript
ECHO.js 纯javascript轻量级延迟加载的实例代码
May 24 Javascript
一览画面点击复选框后获取多个id值的方法
May 30 Javascript
BootStrap tooltip提示框使用小结
Oct 26 Javascript
jQuery操作json常用方法示例
Jan 04 Javascript
vue.js实例todoList项目
Jul 07 Javascript
老生常谈javascript的面向对象思想
Aug 22 Javascript
JavaScript中如何判断一个值的类型
Sep 15 Javascript
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
Oct 26 Javascript
基于vue.js快速搭建图书管理平台
Oct 29 Javascript
Angular 5.x 学习笔记之Router(路由)应用
Apr 08 Javascript
JS定时器如何实现提交成功提示功能
Jun 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面向对象的方法重载两种版本比较
2008/09/08 PHP
PHP 引用文件技巧
2010/03/02 PHP
PHP实例分享判断客户端是否使用代理服务器及其匿名级别
2014/06/04 PHP
PHP微信PC二维码登陆的实现思路
2017/07/13 PHP
PHP用PDO如何封装简单易用的DB类详解
2017/07/30 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
JavaScript中的ubound函数使用实例
2014/11/04 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
2015/08/07 Javascript
TypeScript Type Innference(类型判断)
2016/03/10 Javascript
html5+CSS 实现禁止IOS长按复制粘贴功能
2016/12/28 Javascript
BootStrap实现轮播图效果(收藏)
2016/12/30 Javascript
详解支持Angular 2的表格控件
2017/01/19 Javascript
使用nodejs下载风景壁纸
2017/02/05 NodeJs
JS基于对象的链表实现与使用方法示例
2019/01/31 Javascript
vue中格式化时间过滤器代码实例
2019/04/17 Javascript
小程序中英文混合排序问题解决
2019/08/02 Javascript
vue点击按钮动态创建与删除组件功能
2019/12/29 Javascript
Python 序列化 pickle/cPickle模块使用介绍
2014/11/30 Python
Python两个内置函数 locals 和globals(学习笔记)
2016/08/28 Python
Python2和Python3.6环境解决共存问题
2018/11/09 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
2019/01/08 Python
Python操作SQLite数据库过程解析
2019/09/02 Python
使用pickle存储数据dump 和 load实例讲解
2019/12/30 Python
Python实现密钥密码(加解密)实例详解
2020/04/26 Python
浅谈pytorch中torch.max和F.softmax函数的维度解释
2020/06/28 Python
用sleep间隔进行python反爬虫的实例讲解
2020/11/30 Python
HTML5实现表单自动验证功能实例代码
2017/01/11 HTML / CSS
意大利体育用品网上商城:Nencini Sport
2016/08/18 全球购物
美国在线面料商店:Online Fabric Store
2018/07/26 全球购物
创建市级文明单位实施方案
2014/03/01 职场文书
安全生产标语大全
2014/10/06 职场文书
2014年扶贫帮困工作总结
2014/12/09 职场文书
Spark SQL 2.4.8 操作 Dataframe的两种方式
2021/10/16 SQL Server
实现AJAX异步调用和局部刷新的基本步骤
2022/03/17 Javascript
Redis实现一个账号只能登录一个设备
2022/04/19 Redis
win10蓝屏0xc0000001安全模式进不了怎么办?win10出现0xc0000001的解决方法
2022/08/05 数码科技