setTimeout(function(obj){
alert( obj.a );
}, 2000, {a:1});
세 번째 매개변수가 전달되며, 세 번째 매개변수는 콜백 함수의 매개변수 obj로 전달됩니다. . IE가 아닌 브라우저에서는 1이 나타납니다. 이는 콜백 함수의 실행 컨텍스트를 해결한다는 장점이 있습니다. 예를 들어 객체의 메서드를 호출하려는 경우 매개변수를 통해 객체를 전달할 수 있습니다.
setTimeout(function(obj){
obj.method();
}, 2000, obj);
물론 다음과 같이 여러 매개변수를 콜백 함수에 전달할 수도 있습니다. >
alert(a);
alert(b);
}, 2000, 1,2);
이번에는 두 개의 매개변수 1,2를 콜백 함수에 전달했습니다. Firefox/Safari/Chrome/Opera 순으로 . 원하시면 더 보내셔도 됩니다.
IE는 세 번째 매개변수를 지원하지 않지만 Firefox와 Safari/Chrome/Opera 사이에는 여전히 차이점이 있습니다.
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 매개변수 버그 해결
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); 🎜>}
},
지연
)
}
}
)
}