调用方式:
iTimerID = window.setTimeout(vCode, iMilliSeconds [, sLanguage])
功能:
Evaluates an expression after a specified number of milliseconds has elapsed. 在 超过一定的时间间隔(iMilliSeconds,这个参数以毫秒为单位,如果你输入1000,则表示一秒)之后执行表达式vCode,这个vCode可 以是一段程序,亦可以是一个函数指针,即函数名称。
例如:
window.setTimeout("alert('Hello, world')", 1000);
或函数指针
function func1() {alert("Hello, world");}
window.setTimeout(func1, 1000);

注意,在第二种调用方法中,你是不能向函数传递参数的,
例如:
function func2(message) { alert( message ); }
像以下的调用方式:
window.setTimeout(func2("Hello world"), 1000);
将产生“参数无效”的错误, 因为该写法是在调用func2方法,并非向 setTimeout 传递一个函数指针 。
要避免这种错误,那么就写成第一种方式好了:window.setTimeout("func2('Hello world')", 1000);

这个 window.setTimeout 方法的返回值什么呢? window.setTimeout 亦可解释为 “ 延迟执行 ”。
例如 window.setTimeout(func1, 5000); 表示,func1() 函数,并不在该语句执行时立即执行,
而是从该语句执行后算起,延后 5 秒执行。所以,window.setTimeout 方法的返回值本质上就是这个  “ 延迟执行 ”的进程的ID。(根《JavaScript高级程序设计》一书)。如果你在这 5 秒的等待过程中,想取消
这个进程,那个这个ID就会起作用了。通过调用 window.clearTimeout(iTimeoutID) 方法,并向该方法中传递
你在 iTimerID = window.setTimeout(vCode, iMilliSeconds [, sLanguage]) 中获得的ID,即可取消延迟执行。

因此,如果你想要取消 延迟执行 ,所定义的变量 iTimerID  必须是一个全局变量(global variable )。

setInterval 介绍:
iTimerID = window.setInterval(vCode, iMilliSeconds [, sLanguage]) 该方法与 window.setTimeout 
方法最大的区别是:该方法执行多次,即按一定的时间间隔不断地执行。其他方面,都是相同的。
要取消执行,可以调用。window.clearInterval(iIntervalID) 方法。

提示:如果我们在 window.setTimeout 调用的函数中,再调用一次  window.setTimeout 方法,那不是实现了 
setInterval 的效果

setTimeout为0的应用

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
<title>setTimeout为0的应用</title> 
<style type="text/css"> 
body { background:url(images/page-bg.gif); font-size:14px;} 
</style> 
</head>

<body> 
<h1>setTimeout为0的应用</h1> 
<p>在下面两个输入框里输入字符,看看有什么不同?</p> 
<p> 
A:<input type="text" id="t1" name="t1" 
onkeydown="document.getElementById('t1text').innerHTML='你输入了:'+this.value;" value="" />没有使用setTimeout

</P> 
<div id="t1text">你输入了:</div> 
<p> 
B:<input type="text" id="t2" name="t2" 
onkeydown="var t2=this;setTimeout(function(){document.getElementById('t2text').innerHTML='你输入了:'+t2.value},0);" 
value="" />setTimeout为0</p> 
<div id="t2text">你输入了:</div> 
</body> 
</html>

类似起线程。前者没用settimeout ,所以是主线程去做的响应,所以在onkeydown 就触发事件执行。得到的数据会有差异。

setTimeout与setInterval是window对象的两个非常神奇方法,用于实现定时或延时调用一个函数或一段代码。
(新手可能认为setTimeout与setInterval是javascript函数,这是错误的。新手容易将javascript对象函数与DOM对象方法混淆。)

先来一段代码,大家猜猜在各种浏览器下的结果会是怎么样的呢?
JScript code, 'VBScript');

(二)Mozilla系列中的setTimeout

我们看看Mozilla官方网站上 Gecko DOM Reference 手册中是如何说的:
window.setTimeout
  Summary
  Executes a code snippet or a function after specified delay.

Syntax
  var timeoutID = window.setTimeout(func, delay, [param1, param2, ...]);
  var timeoutID = window.setTimeout(code, delay);

前两个参数都一样,没差别,从第三个参数就不同了。
因为目前只有IE浏览器支持多种语言的脚本,其它浏览器只支持js脚本所以不需要传语言类型的参数。
Mozilla把传给setTimeout的第3个以及更后面的更多参数依次的传给前面的func做为参数。
Firefox, Opera, Safari, Chrome等等也都是如此。

但是注意到,Mozilla上说了他家的setTimeout有一个叫做"Lateness" argument的BUG.
  "Lateness" argument
  Functions invoked by setTimeout are passed an extra "lateness" argument in Mozilla,
  i.e., the lateness of the timeout in milliseconds. (See bug 10637 and bug 394769.)
这就是开头那个例子中,Firefox(3.0)下有一个乌龙数字的根源。

Mozilla上关于setTimeout的说明:
  https://developer.mozilla.org/en/DOM/window.setTimeout

(三)其它浏览器系列(Opera, Safari, Chrome)中的setTimeout
  和Mozilla系列中的基本一样,但是没有Mozilla系列中的多一个参数的BUG.


武林外传:使用setTimeout的小技巧

(1)IE中给setTimeout中的调用函数传参数
  上面的分析可知,IE是不支持在setTimeout中给被调用的函数传参数的,为了浏览器世界的和谐,我们可以把函数调用参数包裹进新的匿名函数中。示例:
  function f(a){
  alert(a);
  }
  // setTimeout(f,50,'hello'); //用于非IE
  setTimeout(function(){f('hello')},50); //通用
  var str='hello';
  setTimeout(function(){f(str)},50); //通用

(2)this问题
  setTimeout调用的函数被执行时的上下文是全局,而不再是调用setTimeout方法时的上下文。所以,setTimeout的第一个参数 的函数被执行时其this是指向window的,如果需要保留调用setTimeout方法时的this,就需要把当时的this传进去。示例:
  function Person(name){
  this.name=name;
  var f=function(){alert('My name is '+this.name)};

// setTimeout(f,50); //错误

var THIS=this;
  setTimeout(function(){f.apply(THIS)},50); //正确,通用
  setTimeout(function(){f.call(THIS)},50); //正确,通用
  }
  new Person('Jack');

setTimeout设置为0的作用的更多相关文章

  1. setTimeout设置为0的意义

    今天再看 Promise 代码时,有个地方用到了setTimeOut函数,但是第2个参数设为0,顿时懵逼了,这是啥意思? function resolve(newValue) { value = ne ...

  2. setTimeout设置为0 为啥不能立马执行

    setTimeout(function(){}, timer) 是指延时执行.第一个参数是回调函数,第二个参数是指延时多久执行回调函数. setTimeout(function(){console.l ...

  3. 【 js 基础 】【 源码学习 】 setTimeout(fn, 0) 的作用

    在 zepto 源码中,$.fn 对象 有个 ready 函数,其中有这样一句 setTimeout(fn,0); $.fn = { ready: function(callback){ // don ...

  4. setTimeout(fn, 0) 的作用

    在 zepto 源码中,$.fn 对象 有个 ready 函数,其中有这样一句 setTimeout(fn,0); 1 $.fn = { 2 ready: function(callback){ 3 ...

  5. js中setTimeout()时间参数设置为0的探讨

    起因源于一道前端笔试题: var fuc = [1,2,3]; for(var i in fuc){ setTimeout(function(){console.log(fuc[i])},0); co ...

  6. Access数据库中Sum函数返回空值(Null)时如何设置为0

    在完成一个Access表中数据统计时,需要统计指定字段的和,使用到了Sum函数,但统计时发现,指定条件查询统计时有可能返回空值(Null),导致对应字段显示为空白,正常应显示为0.基本思路是在获取记录 ...

  7. 关于内层DIV设置margin-top不起作用的解决方案

    from:http://www.cnblogs.com/huangyong8585/archive/2013/05/21/3090779.html (一) 近日在做另外一个站点的时候,又遇到这个问题, ...

  8. Volley 设置 RetryPolicy 不起作用, 重复提交

    RT, Google后有的说是 将超时时间设置为0, 但是还是会重试提交, 解决方案如下: static HurlStack stack = new HurlStack(){ @Override pr ...

  9. java 线程Thread.Sleep详解 Thread.Sleep(0)的作用(转载)

    我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间.那么你有没有正确的理解这个函数的用法呢? 思考下面这两个问题: 1.假设现在是 2008-4-7 12:00:00.000,如果 ...

随机推荐

  1. HTML表单组件

    HTML表单组件 一.说明 form标签里面的东西 二.效果图 三.代码 <!DOCTYPE html> <html> <head> <title>Fo ...

  2. Linux 设置程序开机自启动 (命令systemctl 和 chkconfig用法区别比较)

    之前在Linux centos 7 上安装了apache 和mysql,当时并没有设置开机自动启动. 最近又重新练习网页,每次开机总是要手动启动httpd和mysqld,不方便,就想设置成开机自动启动 ...

  3. 解决jenkins运行selenium测试出错的问题

    If you run Jenkins as a service in the background it won't open apps in the foreground. You may eith ...

  4. PHP函数笔记

    一.函数(Function) 1.什么是函数:封装的,可以重复使用的                       完成特定功能的代码段. 2.分类  (1)系统函数  (2)自定义函数 3.自定义函数 ...

  5. Enduring Exodus CodeForces - 655C (二分)

    链接 大意: n个房间, 1为占用, 0为未占用, John要将k头奶牛和自己分进k+1个空房间, 求John距最远的奶牛距离的最小值 这种简单题卡了20min.... 显然对于固定的k+1个房间, ...

  6. Charles安装破解、抓取https请求及常见问题解决方法

    现在基本大部分网站都使用了https,所以要想抓到https的请求,首要任务是先有工具:charles.fiddler,先介绍下charles针对https请求的抓取方法,此方法兼容windows和m ...

  7. python 小练习 11

    桌子上有一堆数量不超过20的果子,每个果子的重量都是不超过20的正整数,全部记录在列表 L 里面.小明和小红决定平分它们,但是由于他们都太自私,没有人愿意对方比自己分得的总重量更多.而果子又不能切开, ...

  8. @Component、@Service、@Constroller

    @Component.@Service.@Constroller,@Repository,它们分别用于软件系统的不同层次: @Component 是一个泛化的概念,仅仅表示一个组件 (Bean) ,可 ...

  9. quartz---触发job时间和结束时间

    quartz:Trigger:触发job时间和结束时间 package com.imooc.demo.helloQuartz; import java.text.SimpleDateFormat; i ...

  10. JS获取昨天/今天/今年第一天的方法

    talk is cheap,show me the code! //获取昨天 var day1 = new Date(); day1.setTime(day1.getTime()-24*60*60*1 ...