티스토리 뷰

JavaScript

함수의 다양한 형태

똑땅해 2018. 1. 15. 23:29

1. 콜백 함수

익명 함수의 대표적인 용도이다.

코드를 통해 명시적으로 호출하는 함수가 아니라, 어떤 이벤트가 발생했거나 특정 시점에 도달했을 때 시스템에서 호출되는 함수이다.

또한, 특정 함수의 인자로 넘겨서, 코드 내부에서 호출되는 함수이다.


대표적인 예는 자바스크립트에서의 이벤트 핸들러 처리이다.


2. 즉시 실행 함수

함수를 정의함과 동시에 바로 실행하는 함수이다.

즉시 실행 함수의 경우, 같은 함수를 다시 호출할 수 없다.

따라서 이러한 특징을 이용하여 최초 한 번의 실행만을 필요로 하는 초기화 코드 부분 등에 사용할 수 있다.


jQuery와 같은 자바스크립트 라이브러리나 프레임워크의 소스들에서도 사용이 되는데, 그 이유는 자바스크립트의 변수 유효 범위 특성 때문이다. 

자바스크립트에서는 함수 유효 범위를 지원한다.

기본적으로 자바스크립트는 변수를 선언할 경우 전역 유효 범위를 가지게 된다. 그러나 함수 내부에서 정의된 매개변수와 변수들은 함수 코드 내부에서만 유효할 뿐 함수 밖에서는 유효하지 않다.

따라서 전역 네임스페이스를 더럽히지 않으므로, 다른 자바스크립트 라이브러리들이 동시에 로드 되더라도 라이브러리간 변수 이름 충돌 같은 문제를 방지할 수 있다.


3. 내부 함수

함수 코드 내부에 정의된 함수이다. 내부 함수는 클로저를 생성하거나 부모 함수 코드에서 외부에서의 접근을 막고 독립적인 헬퍼 함수를 구현하는 용도 등으로 사용한다.



내부 함수에서는 자신을 둘러싼 부모 함수의 변수에 접근이 가능하다.

내부 함수는 일반적으로 자신이 정의된 부모 함수 내부에서만 호출이 가능하다.


하지만 함수 외부에서도 특정 함수 스코프 안에 선언된 내부 함수를 호출할 수 있다.

부모 함수에서 내부 함수를 외부로 리턴하면, 부모 함수 밖에서도 내부 함수를 호출하는 것이 가능하다.


// 함수 스코프 외부에서 내부 함수 호출

function parent() {

var a = 100;

var child = function () {

console.log(a);

};


// child() 함수 반환

return child();

}


var inner = parent();

inner();

parent() 함수가 호출되면, inner 변수에 child 함수 변수 값이 리턴된다.

child 함수 변수는 내부 함수의 참조값이 있으므로, 결국 inner 변수도 child() 내부 함수를 참조한다.


위와 같이 실행이 끝난 parent()와 같은 부모 함수 스코프의 변수를 참조하는 inner()와 같은 함수를 클로저라고 한다.


4. 함수를 리턴하는 함수

함수는 일급 객체이므로 함수 자체를 리턴할 수 있다.

이러한 특징을 이용하여 함수를 호출함과 동시에 다른 함수로 바꾸거나, 자기 자신을 재정의하는 함수를 구현하는 등 다양하게 활용할 수 있다.


var self = function () {

console.log('a');

return function () {

console.log('b');

}

};

self = self(); // a

self();         // b

처음 self() 함수 호출 시 'a'를 출력하고, 다시 self 함수 변수에 self() 함수 호출 리턴값으로 내보낸 함수가 저장된다.

두 번째로 self() 함수가 호출됐을 때는 'b'가 출력된다. 첫 번째 호출 후에, self 함수 변수가 가리키는 함수가 원래 함수에서 리턴 받은 새로운 함수로 변경됐기 때문이다.

'JavaScript' 카테고리의 다른 글

함수 호출과 this  (0) 2018.01.16
함수 객체  (0) 2018.01.13
함수 선언  (0) 2017.12.30
자바스크립트 패턴 - 객체 생성 패턴  (0) 2017.10.28
자바스크립트 패턴 - 함수  (0) 2017.09.24
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/11   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
글 보관함