모던 웹을 위한 Javascript jQuery 책을 보면서 정리하는 내용이다. 


자바스크립트에서는 함수도 하나의 자료형이라 매개변수로 전달 할 수 있다. 이를 콜백 함수라고 한다. 


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
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>함수</title>
<script>
 
/*
 콜백함수
*/    
 
function callFiveTimes (a) {
    // 5회 반복
    for (var i = 0; i < 5; i++) {
        callback();
    }
}
 
var callback = function () {
    alert('함수 호출');
};
 
callFiveTimes(callback);
 
</script>
</head>
<body>
 
</body>
</html>
cs



결과 : alert 창 5회 출력


익명콜백함수 : 콜백함수는 익명 함수로 사용하는 경우가 많다.

위와 같은 값을 출력하는 코드이다.


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
31
32
33
34
35
36
37
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>함수</title>
<script>
 
/*
 콜백함수
자바스크립트에서는 함수도 하나의 자료형이기 때문에 매개변수로 전달 할 수 있다. 
*/    
 
function call(callback) {
    for (var i = 0; i < 2; i++) {
        callback();
    }
}
 
/*
var callback = function () {
    alert('함수 호출');
}
call(callback);
*/
 
call (function () {
    alert('함수 호출');
});
 
 
</script>
</head>
<body>
 
</body>
</html>
cs




함수를 리턴하는 함수

함수를 매개변수로 전달할 수 있다는 건 함수를 리턴하는 함수도 만들 수 있다는 의미이다.


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
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>함수</title>
<script>
 
/*
함수를 리턴하는 함수
*/    
 
function returnFunc () {
    return function () {
        alert('hello javascript');
    };
}
 
returnFunc()(); // ()() 호출하면 함수 안의 함수를 호출할 수 수 있다.
 
 
</script>
</head>
<body>
 
</body>
</html>
cs


함수를 리턴하는 함수는 어디에 사용하나?

함수를 리턴하는 함수를 사용하는 이유는 클로저 때문이다 


클로저 예시)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>함수</title>
<script>
 
/*
클로저(closure)
*/    
 
function test (name) {
    var output = 'Hello, ' + name + ' !';
}
 
alert(output); // output은 지역변수라 함수 외부에서 사용할 수 없음
 
</script>
</head>
<body>
 
</body>
</html>
cs


output은 지역변수라 함수 외부에서 사용할 수 없다. 하지만 클로저를 사용하면 이 규칙을 무시할 수 있다. 


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
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>함수</title>
<script>
 
/*
클로저(closure)
*/    
 
function test (name) {
    var output = 'Hello, ' + name + ' !';
    
    return function () {
        alert(output);
    };
}
 
test('moondol')(); 
 
</script>
</head>
<body>
 
</body>
</html>
cs


지역변수 output을 남겨둔다고 외부에서 마음대로 사용할 수 있는 것은 아니다. 

반드시 리턴된 클로저 함수를 사용해야 지역 변수 output을 사용할 수 있다. 클로저 함수로 인해 남은 지역변수는 각각의 클로저 함수의 고유한 변수이다. 


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
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>함수</title>
<script>
 
/*
클로저(closure)
*/    
 
function test(name) {
    var output = 'Hello, ' + name + ' !!';
    return function () {
        alert(output);
    };
}
 
var test_1 = test('1111')();
var test_2 = test('2222')();
 
</script>
</head>
<body>
 
</body>
</html>
cs

test_1과 test_2가 각각 호출되는 것을 알 수 있다.


퇴사 관련 이야기들을 모아 책으로 출판했습니다. 

아래 링크에서 전체 목차를 읽어보세요!

대기업 퇴사 이야기 전체보기 : http://www.bookk.co.kr/book/view/21659



아래 링크로 간단한 후기 링크를 남기면 배송비도 환급된다고 하니 참고해주세요.

http://www.bookk.co.kr/community/postscript

+ Recent posts