이야기앱 세상

setTimeout 사용시 Uncaught TypeError: Illegal invocation이 발생할 경우 본문

IT/JavaScript

setTimeout 사용시 Uncaught TypeError: Illegal invocation이 발생할 경우

storya 2022. 1. 4. 22:15

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) 함수 대신 문자열로 명시하면 실행은 되지만 보안 취약점 때문에 권장하지 않음

반응형
Comments