setTimeout和setInterval是延时或定时调用某个函数某段代码。基本上是一样的,接下来就只以setTimeout为例。
通常使用形式:
iTimerID = setTimeout(strJsCode, 500) //strJsCode为一个包含js代码的字符串
iTimerID = setTimeout(objFunction, 500) //objFunction为一个函数对象
看一下下面的代码:
function showArguments() {
var s = 'length: ' + arguments.length;
for (var i = 0; i < arguments.length; i++)
s += ' [' + i + ']: ' + arguments[i];
alert(s);
}
setTimeout(showArguments, 500, 'parallelism', 'serialization');
结果:
IE: length: 0
Firefox: length: 3 [0]: parallelism [1]: serialization [2]: 0
Chrome: length: 2 [0]: parallelism [1]: serialization
可以看出,结果有很大的不同。
1. IE中的setTimeout
setTimeout Method
Evaluates an expression after a specified number of milliseconds has elapsed.
Syntax
iTimerID = window.setTimeout(vCode, iMilliSeconds [, sLanguage])
Parameters
vCode Required. Variant that specifies the function pointer or string that indicates
the code to be executed when the specified interval has elapsed.
iMilliSeconds Required. Integer that specifies the number of milliseconds.
sLanguage Optional. String that specifies one of the following values:
JScript Language is JScript.
VBScript Language is VBScript.
JavaScript Language is JavaScript.
setTimeout接收3个参数,第3个参数表示脚本语言的类型,如果你再传入更多的参数,是无意义的。
2. Mozilla中的setTimeout
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);
但是有个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.)
3. 其它浏览器(Opera, Safari, Chrome)的setTimeout
和Mozilla系列中的基本一样,但是没有Mozilla系列中的多一个参数的BUG.
解决
1. IE中给setTimeout中的调用函数传参数:
// Applicable in non-IE browsers
setTimeout(showArguments, 500, 'parallelism', 'serialization');
// Commonly applicable in all of the browsers
setTimeout(function() {
showArguments('parallelism', 'serialization');
}, 500);
2. this问题:
setTimeout调用的函数被执行时的上下文是全局,而不再是调用setTimeout方法时的上下文。所以,setTimeout的第一个参数的函数被执行时其this是指向window的,如果需要保留调用setTimeout方法时的this,就需要把当时的this传进去。示例:
function Integral(name) {
this.name = name;
var derive = function() { alert(this.name); }
// Not applicable
// setTimeout(derive, 500);
var THIS = this;
// Either of the statements below is ok
setTimeout(derive.apply(THIS), 500);
setTimeout(derive.call(THIS), 500);
}
new Integral('amount');
分享到:
相关推荐
然而,这两个函数在不同的浏览器中可能存在细微的差异,尤其是在老版本的浏览器中。这些差异主要源于各个浏览器对于标准实现的不同理解和实现方式。 首先,`setTimeout` 是用来执行一次性的延迟操作,而 `...
最新写代码中时,看到项目中有人用到了 setTimeout(fun,0),...这样就可以理解 setTimeout(fun,0) 了,它并不是代表立即执行该代码,除非任务队列为空(事实上,各个浏览器在实际执行这个的时候也是有差异了,比较新的浏
尽管它们的基本功能相似,但在使用场景和性能上存在差异。`setTimeout`用于执行一次性的延迟操作,而`setInterval`用于周期性地执行操作。然而,在实际开发中,开发者们通常被建议优先使用`setTimeout`而非`...
9. **浏览器兼容性**:不同的浏览器对JavaScript的实现可能存在差异,某些极端的代码可能在某些浏览器上运行良好,而在其他浏览器上导致问题。 10. **性能优化**:为了避免上述问题,开发者通常会采用一些最佳实践...
经过测试- Nodejs的浏览器React本机它是如何工作的Javascript是一种脚本语言,只能在一个进程上运行,因为setInterval和setTimeout都不准确,因为该进程可能忙于其他工作。 设置传统间隔将很快证明自己不准确,在此...
如果当前执行栈中有其他任务在运行,定时器可能会被推迟,导致实际的执行时间与预期不同。这种延迟对于`setTimeout()`来说影响相对较小,因为它只执行一次;但对于`setInterval()`来说,如果上一次执行还未完成,下...
总的来说,了解不同浏览器对 `setTimeout` 和 `setInterval` 额外参数的支持情况是非常重要的,这对于编写兼容性良好的前端代码至关重要。在编写JavaScript代码时,应该尽量避免依赖这种非标准的行为,或者通过上面...
- `setTimeout`和`setInterval`在不同浏览器中可能存在精度问题,使用`requestAnimationFrame`可以得到更一致的结果。 10. **DOM操作**: - 不同浏览器的DOM API可能有所不同,如`getElementById`和`...
6. **定时器**:setTimeout和setInterval在某些情况下可能会出现不一致的行为,比如在页面卸载时。自定义库应考虑这些情况并提供更可靠的定时器解决方案。 7. **JSON处理**:虽然JSON是现代浏览器的标配,但老版本...
标题提到的“文字循环向上移动支持多浏览器”意味着我们需要解决不同浏览器之间的兼容性差异,确保在主流的浏览器如Chrome、Firefox、Safari、Edge以及Internet Explorer上都能正常运行。传统的实现方式是通过CSS的`...
IE6是一款非常古老的浏览器,由于其已不再更新且存在许多已知的兼容性问题,因此现代的Web开发者往往需要额外的代码来确保在IE6上正常运行。这个滚动新闻的实现可能使用了条件注释、特征检测或者特定的CSS hack来...
例如,IE浏览器与Firefox、Chrome等现代浏览器在处理某些JavaScript特性时可能存在差异,需要通过polyfill或条件注释来确保代码在各个浏览器中都能正常运行。 在JavaScript的特效实现中,经典的案例包括图片轮播、...
标题中的问题涉及到JavaScript的`setInterval`函数在不同浏览器,特别是火狐(Firefox)和Chrome中的行为差异。当用户在浏览器中切换标签时,`setInterval`的行为可能会变得不一致,这在描述中有所体现。IE浏览器...
8. **定时器差异**:setTimeout和setInterval在不同浏览器中的执行精度可能会有所不同,需要适当调整代码以确保一致的行为。 综上所述,要实现"支持IE与火狐的脚本特效",开发者需要对各种兼容性问题有深入理解,并...
通过学习“IE火狐的JavaScript兼容.doc”文档,开发者可以更好地理解这些差异,并采取适当的措施确保代码在各种浏览器上的正常运行,提高用户体验。同时,随着现代浏览器对标准的更好支持,以及渐进增强和优雅降级的...
因此,为了实现跨浏览器兼容,我们可能需要使用一些回退策略或使用像jQuery这样的库来处理浏览器差异。 **JavaScript基础** 在JavaScript中,我们可以利用定时器(`setInterval`)来定期改变图片的位置,模拟滚动...
JavaScript是一种广泛应用于Web开发的脚本语言,它在不同的浏览器中可能会有不同的行为和表现,尤其是在老版本的Internet Explorer(IE)和Firefox之间。这两个浏览器在处理JavaScript语法、DOM操作、CSS渲染等方面...
Firefox是Mozilla公司推出的开源浏览器,以其对Web标准的良好支持和强大的开发者工具而受到开发者喜爱,但它与基于Chromium内核的浏览器(如Chrome)在某些功能实现上可能有所不同。 日历控件通常由JavaScript编写...
支付宝生活助手导航代码是专为实现跨浏览器兼容性设计的一款前端解决方案,主要目标是确保在Firefox(FF)、Internet Explorer(IE)的6、7、8、9等版本中都能正常运行。这一技术难点在于不同浏览器对HTML、CSS和...