일급객체란
1. 변수나 데이터 구조에 할당될 수 있다
2. 함수의 인자로 전달될 수 있다
3. 함수의 반환값으로 사용될 수 있다
const add = function(a,b){
return a+b;
}
console.log(add(2,3));//5
호이스팅
함수 선언식을 통해 선언한 함수는 코드 실행 전 호이스팅 되어 함수 선언 이전에 호출할 수 있음
대신 함수 표현식은 변수에 할당된 후 사용가능
클로저
함수가 자신이 선언된 환경(스코프)을 기억하고, 해당 환경에 접근할 수 있는 기능
function outer(){
const outerVar = 'I am outer!';
return function inner(){
return outerVar; // 외부 변수에 접근 가능
};
}
const innerFunction = outer();
console.log(innerFunction()); // 'I am outer!'
function multiplyBy(factor){
return function(num){
return num * factor;
};
}
const double = multiplyBy(2);
console.log(double(5)); // 10
const obj = {
value:42,
method: function(){
setTimeout(() => {
console.log(this.value); // 42(Arrow 함수는 obj의 this를 유지)
}, 1000);
}
};
obj.method();