함수정의
1. 익명함수정의(이름없이 함수정의, 변수가 함수를 참조하게 할 수 있음)
-변수가 함수를 참조하더라도 이름을 붙여넣어줄 수 있음!
ex)
var fun=function() {~}//이름없는 함수정의, 변수에다가 참조
var fun=function practice() {~}//이름있는 함수정의, 변수에다가 참조
"이름있는 함수 정의, 변수에다가 참조"는 함수의 이름이 있더라도 이름으로서 함수를 호출하지는 못한다. 변수의 이름을 통해서 함수를 호출 할 수 있다. 그럼에도 이름을 붙이는 방식의 장점은 MDS에서는, 장점 하나는 에러가 발생 했을 때, stack trace가 함수의 이름을 포함하여 출력하기 때문에 에러를 찾기 쉬운 것이 기명 함수 표현의 장점이라고 이야기한다.
2. 기명함수정의(일반적으로 우리가 아는 함수정의 방식)
ex) function funcName() {~}
즉시실행함수와 지역함수
초기화
즉시 실행 함수는 한 번의 실행만 필요로 하는 초기화 코드 부분에 많이 사용됩니다.
그렇다면 왜 초기화 코드 부분에 많이 사용 할까요? 변수를 전역(global scope)으로 선언하는 것을 피하기 위해서 입니다. 전역에 변수를 추가하지 않아도 되기 때문에 코드 충돌 없이 구현 할 수 있어, 플러그인이나 라이브러리 등을 만들 때 많이 사용됩니다.
예를 하나 들어보겠습니다.
var initText; (function (number) { var textList = ["is Odd Text", "is Even Text"];
if (number % 2 == 0) { initText = textList[1]; }
else { initText = textList[0]; } })(5);
console.log(initText);
console.log(textList);
즉시실행함수 이용한 초기화
전역에 textList가 저장되지 않고, initText만 초기화 된 것을 확인 할 수 있습니다. 또한 textList는 지역 변수로, 전역 변수와 충돌없이 초기화 할 수 있게 됩니다.
라이브러리 전역 변수의 충돌
jQuery나 Prototype 라이브러리는 동일한 $라는 전역 변수를 사용합니다. 만약, 이 두개의 라이브러리를 같이 사용한다면 $ 변수 충돌이 생기게 됩니다.
즉시 실행 함수를 사용하여 $ 전역 변수의 충돌을 피할 수 있습니다.
(function ($) { // $ 는 jQuery object })(jQuery);
즉시 실행 함수 안에서 $는 전역변수가 아닌 jQuery object의 지역 변수가 되어, Prototype 라이브러리의 $와 충돌 없이 사용할 수 있습니다.
출처: https://beomy.tistory.com/9 [beomy]
즉시실행함수
내 생각
생각해보니 main함수와 비슷하다. 여러개의 즉시실행함수를 정의하는 것은 여러개의 main함수를 놔두는 것과 같지 않은가? 플러그인, 라이브러리에서 자주 사용된다는 말을 즉시실행함수를 main함수처럼 이용한다고 생각하면 될듯. 하나의 플러그인, 하나의 라이브러리는 크게 보았을 때 하나의 즉시실행함수로 이루어져있다고 보면 될듯?
즉시실행함수안에 변수와 함수가 차곡차곡 들어가는거지