首页 / 脚本样式 / JavaScript / setTimeout与setInterval在不同浏览器下的差异
setTimeout与setInterval在不同浏览器下的差异2011-08-26 博客园 愚公setTimeout与setInterval是window对象的两个非常神奇方法,用于实现定时 或延时调用一个函数或一段代码。(新手可能认为setTimeout与setInterval是javascript函数,这是错误的。 新手容易将javascript对象函数与DOM对象方法混淆。)先来一段代码,大家猜猜在各种浏览器下的结果会是怎么样的呢?function f(){
var s = "arguments.length:"+arguments.length+"; ";
for(var i=0,n=arguments.length;i< n;i++){
s += " ["+i+"]:"+arguments[i]+"; ";
}
alert(s);
}
setTimeout(f,500,"javascript","AAA")我这里要探讨的,不是什么时候该用哪一个,而是探讨这两个方法在各浏览器 中的差异。原先我一直没觉得这两个方法会有什么乌龙,一个偶然的机会让我得知了,现 在整理一下写出来和大家分享。因为setTimeout与setInterval的参数和用法是一样的,只是功能不同,所以 ,为了省事,我下面只以setTimeout为例进行说明以及举例。setTimeout被最经常用到的形式大概是如下2种样子的:iTimerID = setTimeout(strJsCode, 50) //strJsCode为一个 包含js代码的字符串
iTimerID = setTimeout(objFunction, 50) //objFunction 为一个函数对象第一种调用方式是传包含js代码的字符串,这种方式的好处是简洁,但坏处是 运行效率差,而且不利于语法解析,有潜在风险,更重要的是,处理比较复杂的 内容比较费劲,这一点和eval的弊端是一致的。所以,我们认为,通常应当采用第二种方式调用为好。(后面我的例子均采用 第2种调用方式)现在来揭晓开头那一段代码在各种浏览器下的结果:IE(6,7,8)是: arguments.length:0;Opera(6,7,8)是: arguments.length:2; [0]:javascript; [1]:AAA;Firefox(3.0)是: arguments.length:3; [0]:javascript; [1]:AAA; [2]:-15;竟然有这么大的差别,还真是“你唱你的曲,我哼我的调”!Firefox(3.0)下,得出的最后一个数字是不特定的,有时候是0,有时候是一 个负数,这问题后面再说。