Heim Web-Frontend js-Tutorial 仅IE不支持setTimeout/setInterval函数的第三个以上参数_javascript技巧

仅IE不支持setTimeout/setInterval函数的第三个以上参数_javascript技巧

May 16, 2016 pm 06:06 PM
setinterval settimeout

复制代码 代码如下:

setTimeout(function(obj){
alert(obj.a);
}, 2000, {a:1});

即传了第三个参数,第三个参数将作为回调函数的参数obj传入。在非IE浏览器中都弹出了1。这样有个好处,即解决了回调函数的执行上下文,比如要调用某个对象的某个方法,即可以通过参数把该对象传进去。
复制代码 代码如下:

setTimeout(function(obj){
obj.method();
}, 2000, obj);

当然,你还可以传多个参数给回调函数,如下
复制代码 代码如下:

setTimeout(function(a, b){
alert(a);
alert(b);
}, 2000, 1,2);

这次我们传了两个参数1,2给回调函数,Firefox/Safari/Chrome/Opera中依次弹出了1,2。只要你愿意还可以传更多。

虽然除了IE不支持第三个参数外,但Firefox和Safari/Chrome/Opera之间还是有区别的
复制代码 代码如下:

setTimeout(function(){
alert(arguments.length);
}, 2000, 1,2);

传了两个参数1,2给回调函数,然后alert出实参的长度
Firefox : 3
Safari/Chrome/Opera : 2
奇怪吧,明明传的是两个参数,但Firefox中弹出的却是3。如果输出第三个参数会发现它是一个数字,有时还是负数。
关:

http://www.w3.org/TR/Window/

https://developer.mozilla.org/en/DOM/window.setTimeout

http://msdn.microsoft.com/en-us/library/ms536753%28v=vs.85%29.aspx 
//解决IE下setTimeout传参数的bug

复制代码 代码如下:

//解决IE下setTimeout传参数的bug
if(!+[1,]) {
(function(overrideFun){
window.setTimeout = overrideFun(window.setTimeout);
window.setInterval = overrideFun(window.setInterval);
})(
function(originalFun){
return function(code, delay){
var args = [].slice.call(arguments, 2);
return originalFun(
function(){
if (typeof code == 'string') {
eval(code);
}
else {
code.apply(this, args);
}
},
delay
)
}
}
);
}
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist der Unterschied zwischen settimeout und setinterval? Was ist der Unterschied zwischen settimeout und setinterval? Aug 15, 2023 pm 02:06 PM

Was ist der Unterschied zwischen settimeout und setinterval?

Wie verwende ich die Funktion setInterval, um Code regelmäßig auszuführen? Wie verwende ich die Funktion setInterval, um Code regelmäßig auszuführen? Nov 18, 2023 pm 05:00 PM

Wie verwende ich die Funktion setInterval, um Code regelmäßig auszuführen?

So stoppen Sie setInterval So stoppen Sie setInterval Dec 11, 2023 am 11:39 AM

So stoppen Sie setInterval

So verwenden Sie die Window.setInterval()-Methode So verwenden Sie die Window.setInterval()-Methode Aug 31, 2023 am 09:33 AM

So verwenden Sie die Window.setInterval()-Methode

setInterval setInterval Aug 02, 2023 am 10:17 AM

setInterval

Was ist der Unterschied zwischen setTimeout() und setInterval() in JavaScript? Was ist der Unterschied zwischen setTimeout() und setInterval() in JavaScript? Sep 01, 2023 pm 03:01 PM

Was ist der Unterschied zwischen setTimeout() und setInterval() in JavaScript?

Detaillierte Erläuterung der Verwendung von setinterval Detaillierte Erläuterung der Verwendung von setinterval Sep 12, 2023 am 09:55 AM

Detaillierte Erläuterung der Verwendung von setinterval

Verwenden Sie die Funktion „clearTimeout' in JavaScript, um den Timer „setTimeout' abzubrechen Verwenden Sie die Funktion „clearTimeout' in JavaScript, um den Timer „setTimeout' abzubrechen Nov 18, 2023 am 08:05 AM

Verwenden Sie die Funktion „clearTimeout' in JavaScript, um den Timer „setTimeout' abzubrechen

See all articles