setTimeout 사용시 Uncaught TypeError: Illegal invocation이 발생할 경우
setTimeout 사용시 Uncaught TypeError: Illegal invocation이 발생할 경우
setTimeout(function,delay)는 지정한 시간이후 매개변수로 전달되는 함수를 실행하는 함수이다.
1. 함수명을 setTimeout의 매개변수에 지정해서 사용할 수 있다.
function check(){
alert("실행");
}
setTimeout(check,300);
2. 익명함수를 setTimeout의 매개변수에 지정해서 사용할 수 있다.
setTimeout(function(){
alert("실행");
},300);
3. 화살표 함수를 이용해서 지정
setTimeout(()=>alert("실행"),3000);
4. setTimeout 사용시 Uncaught TypeError: Illegal invocation이 발생할 경우
setTimeout(history.back,3000) 와 같은 코드를 실행하면 Uncaught TypeError: Illegal invocation이 발생한다. 매개변수로 전달되는 history.back 메서드가 history에 객체의 메서드로 인식하지 못 해서 발생하는 문제이다. 이런 문제가 생길 경우 익명함수를 만들어서 내부에서 history.back()메서드를 실행하거나 화살 함수 또는 bind()메서드를 사용할 수 있다.
[익명함수 사용]
setTimeout(function(){
history.back();
},300);
[화면표 함수 사용]
setTimeout(()=>history.back(),3000);
[bind()메서드 사용]
setTimeout(history.back.bind(history),3000); 또는 setTimeout(window.history.back.bind(window.history),3000);
[문자열로 명시하는 방법은 권장하지 않음]
setTimeout("history.back()",3000) 함수 대신 문자열로 명시하면 실행은 되지만 보안 취약점 때문에 권장하지 않음