반응형
💡 자바스크립트에서 즉시 실행 함수(IIFE)와 $를 사용하는 이유
글 작성 이유

대부분의 js가 위 그림처럼 시작하길래 이게 뭔가 싶었고 쓰는 이유가 궁금했음.
요점만 정리하면
1. 변수를 전역적으로 사용하지 않게 하기 위함이고 (코드 오염)
2. $ 를 보호하기 위함이였다.
(function($){})() 밖에다가 선언한 함수나 변수는 그냥 전역이 되버린다 코드 오염의 문제가 있다 무슨말이냐면 forumjs에서 사용하는 변수는 forumjs에서만 사용되어야 한다는 말이다. 다른곳에서 접근되게 하면 안 된다는 뜻
$ 보호는 예를들어 $ = 'test' 이렇게 해버리면 $는 그냥 test가 되어버린다 제이쿼리 객체가 아니게 되는거다 그래서 내부에서 $는 무조건 jquery임을 뜻하게 하려고 아래와 같이 하는 것
(function($){ ... })(jQuery);
📘 자바스크립트 함수 스코프와 IIFE 정리
1. 지역 변수와 전역 변수의 차이
- 함수 안에서 선언한 변수는 지역 변수 (밖에서는 접근 불가)
- 함수 밖에서 선언한 변수는 전역 변수 (어디서든 접근 가능)
- 전역 변수는 여러 파일이 함께 쓰는 환경에서 충돌 위험이 있다
var name = "전역"; // 전역 변수
function test() {
var name = "지역"; // 지역 변수 (밖에서는 안 보임)
console.log(name); // "지역"
}
test();
console.log(name); // "전역"
2. 즉시 실행 함수 IIFE란?
IIFE (Immediately Invoked Function Expression) = 즉시 실행되는 함수
(function(){
console.log('이 함수는 바로 실행됨!');
})();
- 함수를 괄호 ( )로 감싸면 "이건 표현식이야!" 라고 JS에게 알려줌
- 그리고 뒤에 ()를 붙이면 바로 실행됨
3. 왜 IIFE를 쓰는가?
이유 설명
| 🛡 전역 변수 충돌 방지 | IIFE 안에 있는 변수는 밖에서 안 보임 (안전하게 보호됨) |
| 💬 코드 깔끔하게 분리 | 외부랑 격리된 "나만의 공간"처럼 쓰기 좋음 |
| ✅ 즉시 실행 필요할 때 | 선언하고 바로 실행해야 할 코드에 적합 |
4. 왜 함수에 $를 넣고 jQuery를 넘기는가?
(function($){
// 이 안에서는 $ = jQuery
$('div').hide();
})(jQuery);
이유:
- $는 원래 jQuery에서 많이 씀
- 근데 다른 라이브러리도 $를 쓸 수 있어서 충돌 가능
- 그래서 함수 안에서만 $를 jQuery로 고정해서 안전하게 쓰는 것
(function(apple){
apple('div').hide();
})(jQuery);
위처럼 $ 대신 다른 이름도 가능. 단지 jQuery를 "별명" 으로 받아서 쓰는 것뿐!
5. IIFE 문법 정리
(function 별명(예: $){
// 여기는 지역 범위
})(넘겨줄 실제 값);
예시:
(function($){
console.log('이 안에선 $는 무조건 jQuery!');
})(jQuery);
🧠 요약
개념 핵심
| 지역 변수 | 함수 안에서만 보임 (안전함) |
| 전역 변수 | 모든 곳에서 보임 (충돌 위험 있음) |
| IIFE | 즉시 실행, 지역 범위 보호 |
| function($){ ... }(jQuery); | $는 jQuery만을 뜻하게 고정 |
function($)에 $를 넣는 이유를 이해하지 못한걸 이해한 배경

반응형
'웹 > JS+Jquery' 카테고리의 다른 글
| 📚 자바스크립트 함수 선언 방식 총정리 (ES5) 함수 선언문 , 함수 표현식, 즉시 실행 함수, 생성자 함수, 객체 리터럴, new function(){} 패턴 (0) | 2025.05.12 |
|---|---|
| 자바스크립트에서 this, var, new 개념 완전 정리 (0) | 2025.05.12 |
| js - 페이지 이동 후 슬라이드 이미지가 안 움직이는 이유 – 이미 로드된 JS의 한계와 해결 (0) | 2025.05.09 |
| JS - 자바스크립트의 객체(Object)를 리터럴 형태로 작성하는 방법 (객체리터럴) (1) | 2025.05.06 |
