在使用JScript的时候,我们有时需要间隔的执行一个方法,比如用来产生网页UI动画特效啥的。这是我们常常会使用方法setInterval或setTimeout,但是由于这两个方法是由脚本宿主模拟出来的Timer线程,在通过其调用我们的方法是不能为其传递参数。
我们常用的使用场景是:
使用匿名函数为setInterval传递参数 - 513394217 - ㄨiao愛window.setTimeout("delayRun()", n);
使用匿名函数为setInterval传递参数 - 513394217 - ㄨiao愛window.setInterval("intervalRun()", n);
使用匿名函数为setInterval传递参数 - 513394217 - ㄨiao愛window.setTimeout(delayRun, n);
使用匿名函数为setInterval传递参数 - 513394217 - ㄨiao愛window.setInterval(intervalRun, n);
显然强行代参数的调用:
使用匿名函数为setInterval传递参数 - 513394217 - ㄨiao愛window.setTimeout("delayRun(param)", n);
使用匿名函数为setInterval传递参数 - 513394217 - ㄨiao愛window.setInterval("intervalRun(param)", n);
使用匿名函数为setInterval传递参数 - 513394217 - ㄨiao愛window.setTimeout(delayRun(param), n);
使用匿名函数为setInterval传递参数 - 513394217 - ㄨiao愛window.setInterval(intervalRun(param), n);
都是错误的,因为string literals形式的方法调用,param必须是全局变量(即window对象上的变量)才行;而function pointer形式的调用,完全错误了,这是把函数的返回值当成了setTimeout/setInterval函数的参数了,完全不是我们所望的事情使用匿名函数为setInterval传递参数 - 513394217 - ㄨiao愛。
解决这个问题的办法可以使用匿名函数包装的方式,在以下scenario中我们这么做:
使用匿名函数为setInterval传递参数 - 513394217 - ㄨiao愛function foo()
使用匿名函数为setInterval传递参数 - 513394217 - ㄨiao愛{
使用匿名函数为setInterval传递参数 - 513394217 - ㄨiao愛 var param = 100;
使用匿名函数为setInterval传递参数 - 513394217 - ㄨiao愛 window.setInterval(function()
使用匿名函数为setInterval传递参数 - 513394217 - ㄨiao愛 {
使用匿名函数为setInterval传递参数 - 513394217 - ㄨiao愛 intervalRun(param);
使用匿名函数为setInterval传递参数 - 513394217 - ㄨiao愛 }, 888);
使用匿名函数为setInterval传递参数 - 513394217 - ㄨiao愛}
使用匿名函数为setInterval传递参数 - 513394217 - ㄨiao愛
使用匿名函数为setInterval传递参数 - 513394217 - ㄨiao愛function interalRun(times)
使用匿名函数为setInterval传递参数 - 513394217 - ㄨiao愛{
使用匿名函数为setInterval传递参数 - 513394217 - ㄨiao愛 // todo: depend on times parameter
使用匿名函数为setInterval传递参数 - 513394217 - ㄨiao愛}
这样一来,就可以不再依赖于全局变量向delayRun/intervalRun函数中传递参数,毕竟当页面中的全局变量多了以后,会给脚本的开发、调试和管理等带来极大的puzzle。
http://www.cnblogs.com/birdshome/archive/2006/01/08/anonymous.html
分享到:
相关推荐
本文实例讲述了JS匿名函数和匿名自执行函数概念与用法。分享给大家供大家参考,具体如下: 1. 匿名函数的常见场景 js中的匿名函数是一种很常见的函数类型,比较常见的场景: <input type=button value=点击 id=...
在JS中无论是setTimeout还是setInterval,在使用函数名作为调用句柄时都不能带参数,而在许多场合必须要带参数, 这就需要想方法解决。 一、采用字符串形式:——(缺陷)参数不能被周期性改变 setInterval(“foo(id...
深化理解setTimeout函数和setInterval函数_.docx
/****************************************************** // // 功能: 修改window.setTimeout,使之可以传递参数和对象参数 // 使用方法: window.setTimeout(回调函数,延迟时间,参数1,参数n) // ******************...
前几天学了js,看到了两个非常有趣的函数,他们分别是setTimeout函数和setInterval函数,这两个函数能使网页呈现非常一些网页中比较常见的效果,比如说图片轮播,等一些非常好玩的效果。下面就来一起来了解这两个...
这是我们常常会使用方法setInterval或setTimeout,但是由于这两个方法是由脚本宿主模拟出来的Timer线程,在通过其调用我们的方法是不能为其传递参数。 我们常用的使用场景是: 代码如下:window.setTimeout(...
setInterval(code,millisec[,”lang”]) setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。 参数 描述 code 必需,要调用的函数或要执行的代码串。 millisec 必需,周期性执行或调用...
使用setInterval()模拟进度条 使用setInterval()模拟进度条
前端开发中,我们会会经常使用定时器setinterval setTimeout等,但当我们离开页面时,定时器会被阻塞,导致我们再回到页面的时候定时任务会混乱运行,为些我的解决方案写了个简单demo,希望对你有所帮助
第一种是最常见的表达语法,其中fnname参数可以是一个匿名函数的引用或者是一个函数名,time是设定的调用faname的时间间隔,单位为毫秒,默认值为10毫秒,par1…….parn为可选参数,是传递给faname方法的参数。
setInterval动作的作用是在播放动画的时,每隔一定时间就调用函数,方法或对象。可以使用本动作更新来自数据库的变量或更新时间显示...其中的参数function是一个函数名或者一个对匿名函数的引用。object参数指定从Objec
博文链接:https://weiweichen1985.iteye.com/blog/193628
主要介绍了Vue中使用 setTimeout() setInterval()函数的问题 ,需要的朋友可以参考下
使用SetInterval和设定延时函数setTimeout 很类似。setTimeout 运用在延迟一段时间,再进行某项操作。
主要介绍了在vue中使用setInterval的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
本文实例讲述了JavaScript使用setInterval()函数实现简单轮询...在JavaScript使用setInterval函数作简单的轮询操作,可以随时判定某一个参数值,但不用刷新页面,即不用在页头加入<META HTTP-EQUIV=”Refresh” CON
主要介绍了vue 解决setTimeOut和setInterval函数无效报错的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧