본문 바로가기

프로그래밍 공부/JavaScript

JavaScript - 함수를 리턴하는 함수 / 클로저

callback 함수에서 함수를 매개 변수로 전달할 수 있다는 것을 알게 되었다. 함수를 매개 변수로 전달할 수 있다는 것은 함수를 return하는 함수도 만들 수 있다는 것이다.

function returnFunction(){

            return function(){

                alert("Hello JavaScript!");

            }

        }

        returnFunction()();

function returnFunction(){

           let output=function(){

               alert("Hello JavaScript!");

           }

           return output;

        }

        returnFunction()();

왼쪽은 익명 함수를 리턴하는 함수이다. 오른쪽은 왼쪽을 풀어서 적은 것이다. 마지막의 returnFunction()();은 returnfunction()함수를 호출하게 되는데 호출이 된다면 함수가 리턴이 되므로 괄호를 한 번 더 사용해 해당 함수를 호출하기 위해 괄호가 하나가 더 있는 것이다.

function SayHelloFunction(name){

            return function(){

                alert("Hello " + name + "!");

            };

        }

SayHelloFunction(prompt("이름 입력"))();

function SayHelloFunction(name){

            let output="Hello " + name + "!";

            return function(){

                alert(output);

            };

        }

SayHelloFunction(prompt("이름 입력"))();

왼쪽은 익명 함수를 리턴하는 함수로 만들어 prompt 함수로 이름을 입력받아 출력시키는 함수이다. 오른쪽은 왼쪽을 풀어서 적은 것이다.

함수를 리턴하는 함수.html
0.00MB

function a(){

            var a=10;

            var b=20;

            var c=30;

        }

        a();

프로그래밍 언어에서는 효율적으로 작동하게 만들어진다. 예를들어 위에 함수에서 변수 a, b, c를 지정하고 function a를 호출을 하고 함수가 끝나는 순간 더 이상 필요가 없다고 프로그래밍 언어가 판단을 하면 메모리 위에서 지우게 된다. 단 함수를 리턴하는 함수를 사용할 때 적용되는 법칙이 달라지게 된다.

function returnFunction(){

            let a=10;

            let b=20;

            let c=30;

            return function(){

                alert(a);

                alert(b);

                alert(c);

            }

        }

        returnFunction()();

위의 경우에 보통은 함수가 끝이 나면 변수 a, b, c는 지워지게 되는데 함수를 리턴하는 함수를 사용할 때는 함수 내부의 함수에 a, b, c를 사용하고 있으므로 프로그래밍 언어가 이 값들은 남겨두게 된다.

function dataFunction(data){

            let d=data*1;

            let e=data*2;

            let f=data*3;

            return function(){

                alert(d);

                alert(e);

                alert(f);

            }

        }

        dataFunction(10)();

        dataFunction(20)();

        dataFunction(30)();

함수를 리턴하는 함수를 사용할 때 장점

1. 변수를 보호 할 수 있다. (함수안에서 선언이된 변수는 함수 밖에서 사용할 수 없다.)

2. 한 번에 여러 번수를 선언하고 활용할 수 있다.

3. 클로저 기능을 사용할 수 있다.

클로저.html
0.00MB