first class object
다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다. - 위키백과
연산의 종류 : 인자로 넘기기, 수정하기, 변수에 대입하기 등
// 1️⃣ 함수는 변수에 할당할 수 있다.
const printer = function () {
console.log('masterpiece movie')
}
printer();
// 2️⃣ 함수는 인자로 넘겨질 수 있다.
const printer = function (nickname) {
console.log('masterpiece ' + nickname);
}
// printer 함수가 인자로 넘겨진다.
const wrapperFunction = (func) => {
const nickname = 'movie';
func(nickname);
}
wrapperFunction(printer);
// 3️⃣ 다른 함수의 결과로서 리턴될 수 있다.
const returnPrinter = () => {
return (nickname) => {
console.log('masterpiece ' + nickname);
}
}
returnPrinter()('movie') // return된 함수 실행
✨ 고차함수
- 함수를 인자로 전달받거나, 함수를 결과로 반환하는 함수
- 가변 데이터를 피하고 불변성을 지향하는 함수형 프로그래밍에 기반을 둠.
🌸엥 여기서 클로저형이 왜 나와..?🌸
- 스코프는 함수를 어디에 선언하였는지에 따라 결정된다. (= 렉시컬 스코핑, Lexical scoping)
- 함수(A)가 특정 함수(B)의 안에 선언되었다면 A의 상위스코프는 B가 된다.
- A는 자신이 속한 렉시컬 스코프(전역, B함수, 자신의 스코프)를 참조할 수 있다.
- 왜? 실행컨텍스트의 스코프 체인을 JS 엔진이 검색했기 때문에 - 식별자 결정
// closure
function outerFunc() {
let x = 10;
let innerFunc = function () { console.log(x); };
return innerFunc;
}
let inner = outerFunc();
inner(); // 10
outerFunc
은 innerFunc
을 반환하고 콜스택에서 제거되었다. x
에 접근할 수 있는 방법은 없다. inner()
를 실행했을 때 x
값인 10
이 출력되었다. x
를 자유 변수(free variable)이라고 부른다. 의도치 않은 변경을 걱정할 필요가 없으며, 변경된 이전 값을 기억할 수 있다.
자료처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임 - 참고