-
즉시 실행 함수에 대해카테고리 없음 2023. 7. 12. 23:11
코드 리뷰 중 생긴 일
새로고침을 막기 위해 beforeUnload 이벤트를 이용하여 코드를 작성 후 pr을 열었다.
하지만 팀원이 이러한 리뷰를 달았다.팀원의 코드리뷰를 보고 나는 "어 저렇게 해도 될 거 같은데?"라는 의문이 들었다. 하지만 실제로는 작동되지 않았고 그때 나도 내가 짠 코드가 즉시실행 함수이기에 작동이 되었다는 걸 알았다.
즉시 실행 함수
그렇다면 즉시 실행 함수란 무엇일까?
함수 정의와 동시에 실행되는 함수를 즉시 실행 함수라고 한다.
즉시 실행 함수는 단 한 번만 호출되며 다시 호출할 수 없다.왜 안 되는 것일까?
구글링을 해보니 즉시 실행 함수는 그룹 연산자(...)로 감싸야한다고 한다.
그렇지 않으면 에러가 발생한다고 한다.즉시 실행 함수는 왜 사용되는가?
1. 필요 없는 전역 변수 생성을 줄일 수 있다.
함수를 생성하면 그 함수는 전역 변수로써 남아있게 되고, 많은 변수의 생성은 전역 스코프를 오염시킬 수 있다.
하지만 즉시실행함수를 선언하면 내부 변수가 전역으로 저장되지 않기 때문에 전역 스코프의 오염을 줄일 수 있다.
2. private 한 변수를 만들 수 있다.
즉시실행함수는 외부에서 접근할 수 없는 자체적인 스코프를 가지게 된다. 이는 클로저의 사용 목적과도 비슷하여 내부 변수를 외부로부터 private 하게 보호할 수 있다.
결론
(() => { window.addEventListener('beforeunload', preventClose); //익명의 함수를 선언하고 그룹연산자로 한번더 감쌈으로서 즉시실행이 된다. })(); () => window.addEventListener('beforeunload', preventClose); // 익명의 함수만 선언된것이다.
내가 생각한 결론은 아래 코드는 한마디로 함수를 선언한 것이었다. 그러므로 실행이 되지 않았던 것이다.
위의 코드는 그룹연산자로 한 번 더 덮었기에 익명의 함수가 선언돼서 실행이 된 것이었다.