JS에서는 setTimeout이든 setInterval이든 함수 이름을 호출 핸들로 사용할 때 매개변수를 취할 수 없습니다.
이를 해결하는 방법이 필요합니다.
1. 문자열 형식 사용: - (결함) 매개변수를 주기적으로 변경할 수 없습니다.
setInterval("foo(id)",1000)
2. 익명 함수 패키징(권장)
window.setInterval(function()
{
foo (id);
}, 1000);
이렇게 하면 foo(id) 함수가 주기적으로 실행되고 변수 id가 전달됩니다.
3. 매개변수 없이 반환 함수의 기능
function foo( id)
{
alert(id);
}
function _foo(id)
{
return function()
{
foo(id); 🎜>}
}
window.setInterval(_foo(id),1000);
여기서 _foo 함수는 매개변수를 받고 매개변수 없이 함수를 반환하도록 정의됩니다. 외부 함수의 매개변수는 함수 내부에서 사용되므로 호출 시 매개변수를 사용할 필요가 없습니다.
window.setInterval 함수에서 _foo(id)를 사용하여 매개변수 없이 함수 핸들을 반환함으로써 매개변수 전달 함수를 구현합니다.
4. setInterval 수정
function foo (id)
{
alert(id);
}
var _sto = setInterval;
window.setInterval = function(callback,timeout,param)
{
var args = 배열 .prototype.slice.call(arguments,2);
var _cb = function()
{
callback.apply(null,args)
}
_sto(_cb ,timeout) ;
}
window.setInterval(hello,3000,userName);
위의 모든 메소드는 setTimeout에도 적합합니다.