AS3 setTimeOut,setinterval用法,Timer 的区别和用法

2607人阅读
JavaScript(31)
setTimeout(3)

17javascript会员们都知道,setInterval和setTimeout这两个函数有什么作用,下面17javascript来详细说明他们的区别。
setInterval()和setTimeout()的两种使用方式及作用域
setInterval()是以指定的时间为周期调用函数的方法。
setTimeout()是延时指定的时间来执行某个函数的方法。
两个函数虽然作用不同,但传参方式和作用域是相同的,下面来具体分析一下。
以setInterval()为例:
第一个参数是用来传递要调用的方法,可以传递一个代码串,如下:
1 &script&
2& &&&function fn(value){
3& && && &alert(&value=& + value);
5& &&&setTimeout(&fn(1)&, 1000);
6 &/script&
但是当在一个闭包里调用的时候,就会出现问题,如:
1 &script&
2& &&&function outerFn(){
3& && && &var value = 1;
4& && && &function fn(){
5& && && && & alert(&value=& + value);
6& && && && & value += 1;
7& && && &}
8& && && &setInterval(&fn()&, 3000);
10& &&&outerFn();
11 &/script&
会出现错误:Uncaught ReferenceError: fn is not defined
原因是fn()是以字符串的方式传递的,它的作用域是全局作用域,全局作用域是无法访问到fn()的。
解决的办法是fn以函数引用的方式传递,也就是setInterval()的第二种传参方式。
1 &script&
2& &&&function outerFn(){
3& && && &var value = 1;
4& && && &function fn(){
5& && && && & alert(&value=& + value);
6& && && && & value += 1;
7& && && &}
8& && && &setInterval(fn, 3000);
10& &&&outerFn();
11 &/script&
但是这样又带来问题,如果想给fn传参数怎么办?可以像如下这样去写吗?
1 &script&
2& &&&function outerFn(){
3& && && &var value = 1;
4& && && &function fn(n){
5& && && && & alert(&value=& + n);
6& && && &}
7& && && &setTimeout(fn(5), 1000);
9& &&&outerFn();
10 &/script&
答案是不可以的,函数只写函数名,是函数引用;后面加括号是函数执行。
1 setTimeout(fn, 1000); //fn的引用
2 setTimeout(fn(5), 1000);&&//fn直接执行
所以第7行,没有按照预期延迟1000毫秒执行fn(5),而是立刻就执行了。这要注意和上面第一种方式——传递代码字符串的不同。
如果确实有从外部传参的需要,该怎么办呢?
1 &script&
2& &&&function outerFn(value){
3& && && &function fn(){
4& && && && & alert(&value=& + value);
5& && && &}
6& && && &setTimeout(fn, 1000);
8& &&&outerFn(5);
9 &/script&
如上,是利用了闭包的原理,fn作为内部函数,是可以访问包含它的outerFn的作用域中的变量的,因此我们想给fn传参,只要给outerFn传参就可以了。这在传递的参数复杂(比如是一个复杂的json)的情况下,很有用途。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:937490次
积分:17371
积分:17371
排名:第334名
原创:716篇
转载:340篇
评论:492条
(1)(24)(3)(26)(14)(24)(11)(23)(71)(41)(48)(12)(7)(14)(17)(20)(35)(24)(13)(36)(14)(1)(8)(8)(16)(13)(17)(8)(2)(7)(5)(6)(7)(6)(4)(8)(7)(2)(2)(4)(8)(11)(22)(31)(2)(1)(14)(87)(9)(5)(67)(2)(2)(2)(1)(1)(2)(1)(2)(21)(30)(25)(37)(69)js中setInterval的使用问题_百度知道
js中setInterval的使用问题
} } function poll(){
window、使用调试器打开脚本;body onload=&脚本中如上.setInterval(body/
el:200px&height.getElementsByTagName(&j++){
var el=&1000000.innerHTML=&body&quot?;
} }&10000;div&个数&)[0];;&&/这是div&quot:50j++){
var el=.getElementsByTagName(&&gtfunction timer(){
for(var j=0;width,timer就开始了;+j+&j&+j+&quot,8); &lt,或者已停止响应;div style=&poll()&div&gt:solid 1个数&quot。”在浏览器中两个脚本是否能同时执行.innerHTML=&quot。您可以停止该脚本;
el:“页面的某个脚本正忙,或者继续运行脚本;)[0];&
for(var j=0,这儿浏览器提示有错误,poll未执行完时;j&border?;这是第&quot
我有更好的答案
&function poll(){&script&&nbsp,1000);}&":solid 1/script&&nbsp.getElementsByTagName("div")[1]:50px, 8是8毫秒啊;j++){&width.setInterval(timer, 1000)两个for循环都改成10;}&&10?poll里面还试图向这个div里面写东西.innerHTML+="这是第"+j+"个数&body/&var el=&j&10. setInterval(&nbsp,8)改成setInterval(";}&&nbsp.innerHTML="这是div"+j+"个数&&&for(var j=0;&&&nbsp,又10000;&/div&gt。代码也帮你修改了一下;j++){&el:200px"&gt:50&nbsp,这个符合逻辑&lt?没等跑完8毫秒过去了;&nbsp问题如下1;&br /&gt:200px"&&&lt,不通建议把setInterval(time,测试成功了再改成大的数值;&&&div style="border.getElementsByTagName("div")[0];function timer(){&&div style="&nbsp. 你向body标记里面写内容的同时div不就被删除了么;&el:solid 1&/div&br /&var el=body onload="poll()"&for(var j=0;}&&nbsp, 8),timer()再次执行,一般人的电脑肯定跑不了2;j&lt,8毫秒你的电脑能完成10000次循环吗
我这样做的目的是在考虑线程的问题,把第二个参数的值设得很小,就是让poll()还未执行完时,通过poll()中的setInterval函数开启另一个函数,观察浏览器是怎么处理这样的问题的,不知道楼上是怎么考虑这个问题的??
setInterval和setTimeout都是在浏览器控制下进行的,当时间满足条件时,浏览器就会要求当前页面执行预定义的代码,因此js代码本身是在相同进程下执行的,只是计时器是浏览器的独立进程而已。
楼上的意思是两个函数能并行执行,还是像thread那样抢占式执行?
我认为是抢占式的建议这样尝试function timer(){alert('timer');}function poll(){window.seTimeout(timer,10);var j=0;for(;j&100000;j++);alert(j);}你看看是先timer还是先j,我觉得还是j先
你要先明白setInterval是什么意思,每8ms执行一次timer
每8秒执行一次
for(var j=0;j&10000;j++),程序会完全卡死的。因为运算不过来,不能这样写。
其他类似问题
为您推荐:
您可能关注的推广
setinterval的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁AS3 setTimeOut,setInterval,Timer 的区别和用法_百度知道
AS3 setTimeOut,setInterval,Timer 的区别和用法
提倡使用Timer代替前两者.TIMER_COMPLETE,循环的时间和次数都可控,只执行一次.TIMER.addEventListener(TimerEvent,1000),是循环无限次; setInterva 按指定时间循环执行函数.start()。 简单说一下使用方法,循环执行函数, 5),函数名); setInterval(函数名, 函数名); Timer 按指定时间: Timer = new Timer(1000,指定次数: setTimeout(函数名; t; 在as3中,1000);
t.addEventListener(TimerEventsetTimeout 在指定时间结束后执行函数
知道智能回答机器人
我是知道站内的人工智能,可高效智能地为您解答问题。很高兴为您服务。
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁热门关键字:
> 定时器setTimeout和setInterval的区别
定时器setTimeout和setInterval的区别
作者:管理员发布时间: 16:49:09评论数:0
转载请自觉注明原文:
两者的用法分别是setTimeout(funhander,time);setInterval(fnhander,time);设置的相应计时器需要用clearTimeout(对象)和clearInterval(对象)清掉。&有以下几点需要注意:
&1、setTimeout(funhander,time)的作用是在过time毫秒后,执行一次句柄funhander指向的方法。而setInterval(funhander,time)的作用是,每隔time毫秒后,就执行一次句柄funhander指向的方法。一直到我清掉计时器停止。
&2、巨大多数的计时器使用都是为了执行渐变、渐隐渐现、位置渐变等效果,所以funhander指向的方法会被多次执行。因此如果我们使用setTimeout做定时器,一般要把计时器的设置写在funhander指向的方法里,这样就可以循环调用,多次执行funhander,一直到我清掉这个定时器。而在使用setInterval设置定时器的时候,一般要放在funhander指向行数的外面。
&3、funhander指向的方法里处理了渐变中的一步,又会被重复执行,所以在此方法中大多包含有判断语句IF。用来控制渐变到一定程度的时候进行相应处理。比如清掉定时器或者进行循环操作。
&4、funhander为句柄,此处还可以为代码段,假设重复调用的函数为function test() {alert("1");}则,我们可以写为 var timer = setTimeout(test,1000)或者 var timer = setTimeout("test()",1000)或者 var timer = setTimeout("alert("1")",1000)。但是下面的写法是错误的。var timer = setTimeout(test(),1000)。
&5、因为funhander部分是句柄,所以不能传递参数,但是有些函数是必须要传递参数的,这时候我们一般用代码段。如果碰到又需要用句柄,又不能用代码段的特殊情况,我们一般用比较特殊的方法处理。如 var timer =setTimeout(test(name),1000)。这时候这个test(name)看起来是不对的,实际上如果他的返回值是一个没有传参的方法,利用子函数可以调用父函数变量的特点,把参数传递到返回函数(子函数)内部。那上面的写法一样是可以的。&6、在设定时器的时候一定要有返回值timer(当然你可以起自己想要的名字)。&清掉定时器的时候需要使用,也是一个好的习惯。
如果您觉得本文的内容对您的学习有所帮助:
相关文章:Jquery中使用setInterval和setTimeout的方法
字体:[ ] 类型:转载 时间:
有时候需要在jquery中调用setInterval和setTimeout,直接在ready中调用其他方法,会提示缺少对象的错误,解决方法如下
方法1. 应用jQuery的扩展可以解决这个问题。
代码如下:$(document).ready(function(){$.extend({& show:function(){&& alert("ready");& }});setInterval("show()",3000);});方法2. 指定定时执行的函数时不要使用引号和括号。
代码如下:$(function(){function show(){&& alert("ready");}setInterval(show,3000);// 注意函数名没有引号和括弧! // 使用setInterval("show()",3000);会报“缺少对象” });
setTimeout()
   从载入后延迟指定的时间去执行一个表达式或者是函数; &&&&& 仅执行一次 ;和window.clearTimeout一起使用.
setInterval()
   在执行时,它从载入页面后每隔指定的时间执行 一个表达式或者是函数;(功能类似于递归函数);和window.clearInterval一起使用.
补充说明:
这两个方法都可以用来实现在一个固定 时间段之后去执行JavaScript。不过两者各有各的应用场景。
实际上,setTimeout和 setInterval的语法相同。它们都有两个参数,一个是将要执行的代码字符串,还有一个是 以毫秒为单位的时间间隔,当过了那个时间段之后就将执行那段代码。不过这两个函数还是有区别的, setInterval在执行完一次代码之后,经过了那个固定的时间间隔,它还会自动重复执行代 码,而setTimeout只执行一次那段代码。虽然表面上看来setTimeout只能应用在on-off方式的动作上,不过可以通 过创建一个函数循环重复调用setTimeout,以实现重复的操作:
代码如下:showTime();function showTime(){&&& var today = new Date();&&& alert("The time is: " + today.toString ());&&& setTimeout("showTime()", 5000);}
一旦调 用了这个函数,那么就会每隔5秒钟就显示一次时间。如果使用setInterval,则相应的代码如下所示:
代码如下:setInterval ("showTime()", 5000);function showTime(){&&& var today = new Date();&&& alert("The time is: " + today.toString ());}
这两种方法可能看起来非常像,而且显 示的结果也会很相似,不过两者的最大区别就是,setTimeout方法不会每隔5秒钟就执行一 次showTime函数,它是在每次调用setTimeout后过5秒钟再去执行showTime函数。这意味着 如果showTime函数的主体部分需要2秒钟执行完,那么整个函数则要每7秒钟才执行一次。 而setInterval却没有被自己所调用的函数所束缚,它只是简单地每隔一定时间就重复执行 一次那个函数。如果要求在 每隔一个固定的时间间隔后就精确地执行某动作,那么最好使用setInterval,而如果不想 由于连续调用产生互相干扰的问题,尤其是每次函数的调用需要繁重的计算以及很长的处 理时间,那么最好使用setTimeout。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 timer setinterval 的文章

 

随机推荐