ホームページ >ウェブフロントエンド >jsチュートリアル >setTimeout/setInterval 関数の 3 番目以降のパラメータをサポートしていないのは IE のみ_JavaScript ヒント

setTimeout/setInterval 関数の 3 番目以降のパラメータをサポートしていないのは IE のみ_JavaScript ヒント

WBOY
WBOYオリジナル
2016-05-16 18:06:201692ブラウズ
コードをコピーします コードは次のとおりです。

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

3 番目のパラメータがコールバック関数のパラメータ obj として渡されます。 。 1 は IE 以外のブラウザでポップアップ表示されます。これには、コールバック関数の実行コンテキストを解決するという利点があります。たとえば、オブジェクトのメソッドを呼び出したい場合、パラメータを介してオブジェクトを渡すことができます。
コードをコピー コードは次のとおりです。

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

もちろん、次のように複数のパラメータをコールバック関数に渡すこともできます。 >
コードをコピーします コードは次のとおりです。 setTimeout(function(a, b){
alert(a);
alert(b);
}, 2000, 1,2);


今回は 2 つのパラメータ 1,2 をコールバック関数に渡しました。 Firefox/Safari/Chrome/Opera の順に。必要に応じてさらに送信することもできます。
IE は 3 番目のパラメータをサポートしていませんが、Firefox と Safari/Chrome/Opera の間にはまだ違いがあります



コードをコピー コードは次のとおりです: setTimeout(function(){
alert(arguments.length);
}, 2000, 1,2); 🎜>
コールバック関数に 2 つのパラメータ 1 と 2 を渡し、実際のパラメータの長さを通知します
Firefox: 3
Safari/Chrome/Opera: 2
不思議です、明らかに渡されていますパラメータは 2 つありますが、Firefox で表示されるパラメータは 3 です。 3 番目のパラメーターを出力すると、それが数値であることがわかります (負の場合もあります)。
閉じる:

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


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

http://msdn.microsoft.com/en-us/library/ms536753(v=vs.85).aspx //IE で渡される setTimeout パラメータのバグを解決


コードをコピー

コードは次のとおりです: // setTimeout パラメータが下に渡されるバグを解決しますIE if (! [1,]) { (function(overrideFun){
window.setTimeout = overrideFun(window.setTimeout);
window.setInterval = overrideFun(window.setInterval);
}) (
function(originalFun){
return function(code, late){
var args = [].slice.call(arguments, 2);
return originalFun(
function() {
if (typeof code == 'string') {
eval(code);
}
else {
code.apply(this, args); 🎜>}
}、
遅延
)
}
}
);
}


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。