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 함수로 이름을 입력받아 출력시키는 함수이다. 오른쪽은 왼쪽을 풀어서 적은 것이다.
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. 클로저 기능을 사용할 수 있다.
'프로그래밍 공부 > JavaScript' 카테고리의 다른 글
JavaScript - 자바스크립트의 실행 순서 (0) | 2019.12.05 |
---|---|
JavaScript - 자바스크립트 내장 함수 (0) | 2019.12.04 |
JavaScript - 콜백 함수 (0) | 2019.12.03 |
JavaScript - 내부 함수 (0) | 2019.12.02 |
JavaScript - 매개변수 / 리턴 값 (0) | 2019.12.02 |