낯선 것들:
first-class function란?
javascript의 함수는 first-class function라고 한다. first-class function은 C/C++/Java에서 들어본 적이 없는 용어인데, 함수가 다른 함수의 argument로 사용되거나, 다른 함수의 return으로 사용될 수 있다는 의미이다.
function add(a, b, callback){ var out = a + b; callback(out); //실행 } add(1,2,function(o){ //anonymous function을 argument로 넘기기 console.log(o); });
아래와 같이 함수는 변수에 대입되는 것도 가능하다.
function add(a, b, callback){ var out = a + b; callback(out);//실행 } var logf = function(o){ //변수에 대입 console.log(o); }); add(1,2,logf); //argument로 넘기기
아래와 같이 validation의 대상이 되는 것도 가능하다.
function add(a, b, callback){ var out = a + b; if(callback) //validate callback(out); //실행 } var logf = function(o){ console.log(o); }); add(1,2,logf); //argument로 넘기기 add(4,5);
함수를 return하여 실행하는 것도 가능하다.
var foo = function (errorcode){ var make_error = function(){ console.log('error code: ' + errorcode); }; return make_error; //함수를 return } var goo = foo('300'); //return된 함수를 goo에 대입 goo(); // 'error code: 300' 출력
위에서 살펴본 바와 같이 Javascript의 함수는 C/C++/Java 언어와는 달리 하나의 객체로써 처리된다고 생각하는 것이 좋다. 생성도 되고, 변수에 대입도 되고, argument나 return으로 넘겨질 수 있다. ()를 붙임으로써 실행이 된다라는 것도 다른 언어와 다른 점이다. 즉, 객체로써 취급되다가 ()를 붙여야만 비로소 C/C++/Java의 함수처럼 'execute'된다는 것이다.
위와 같이, 객체처럼 정의(생성?)되는 시점과 실행 시점의 차이로 인해 this 키워드의 의미가 C++/Java와 다르며, closure라는 개념이 필요하다.(내 방식대로 이해한 내용이므로 정확하지 않을 수 있다.)
정리
1. Javascript의 함수는 객체로써 취급된다. (생성, 변수에 대입, 다른 함수의 argument나 return으로 사용 가능)
2. ()가 붙지 않은 function은 객체라는 의미이며 ()를 붙이면 실행하는 것이다.
댓글 없음:
댓글 쓰기