반응형
일급 객체(First-class Object)
JS에서 함수는 일급 객체(First-class Object)에 해당한다.
일급 객체란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다. 이에 대한 정의는 아래와 같다. 객체지향 프로그래밍에서 자주 언급되는 단어인데 파이썬에서도 해당 개념은 물론 있다만 익숙해진 후엔 인지하고 사용하지는 않았던 것 같다.
- 변수에 할당(assignment)할 수 있다.
- 다른 함수를 인자(argument)로 전달 받는다.
- 다른 함수의 결과로써 리턴될 수 있다.
함수 선언 방식
함수 객체는 위의 조건을 모두 충족시키므로 일급 객체라고 볼 수 있다. 일급 객체이므로 고차 함수를 만들 수 있고 콜백을 사용할 수 있다.
이러한 일급 객체인 함수를 선언하는 방법은 아래와 같이 총 6가지가 있다.
- named function declaration (명명 함수 선언)
- anonymous function expression (익명 함수 표현)
- named function expression (명명 함수 표현)
- Immediately-invoked expression (즉시 실행 표현)
- function constructor (생성자 함수)
- arrow function (화살표 함수)
우선 명명 함수 선언은 아래와 같다.
function test(){
return 1;
}
익명 함수 표현은 아래와 같다. 함수명이 선언되지 않았지만 자바스크립트 엔진이 test라는 변수명을 함수명으로 추정하여 넣는다.
let test = function (){
return 1;
}
아래는 명명 함수 표현이다.
let test = function realFunc(){
return 1;
}
다음은 즉시 실행 표현이다. JSX 예제를 보다 가장 헷갈리는 부분으로 등장했었다.
var test = (function () {
return 1;
})()
아래가 헤매던 부분이다.
{((val)=>{
val = Number(val);
// var은 함수 스코프이다.
// 만약 아래 i를 let으로 선언하게 되면 return시 val+i는 오류가 발생한다.
for(var i=0; i<10; i++){
if(i>=val){ console.log(i); }
}
return val+i;
})
(5)}
이번엔 생성자 함수이다. 지금으로선 크게 사용할 일이 있을까 싶긴 하다.
var test = new Function()
마지막으로 화살표 함수이다.
var test = () => {
return 1;
}
눈에 잘 익지 않아 화살표 함수 예제를 만들어보았다.
var testFunc3=(val)=>{
val = Number(val);
// var은 함수 스코프이다.
// 만약 아래 i를 let으로 선언하게 되면 return시 val+i는 오류가 발생한다.
for(var i=0; i<10; i++){
if(i>=val){ console.log(i); }
}
return val+i;
}
testFunc3(5)
다른 함수들보다 즉시 실행 표현과, 화살표 함수를 좀 더 유심히 볼 필요가 있을 듯하다.
반응형