>웹 프론트엔드 >JS 튜토리얼 >IE에서만 setTimeout/setInterval 함수의 세 번째 이상의 매개변수를 지원하지 않습니다._javascript 팁

IE에서만 setTimeout/setInterval 함수의 세 번째 이상의 매개변수를 지원하지 않습니다._javascript 팁

WBOY
WBOY원래의
2016-05-16 18:06:201697검색
코드 복사 코드는 다음과 같습니다.

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 순으로 . 원하시면 더 보내셔도 됩니다.
IE는 세 번째 매개변수를 지원하지 않지만 Firefox와 Safari/Chrome/Opera 사이에는 여전히 차이점이 있습니다.



코드 복사 코드는 다음과 같습니다. setTimeout(function(){
alert(arguments.length);
}, 2000, 1,2)


콜백 함수에 두 개의 매개변수 1과 2를 전달한 후 실제 매개변수의 길이를 경고합니다.
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(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 함수(코드, 지연){
var args = [].slice.call(arguments, 2);
return originalFun(
function() {
if (코드 유형 == 'string') {
eval(code)
}
else {
code.apply(this, args); 🎜>}
},
지연
)
}
}
)
}


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.