일급 객체
자바스크립트에서 함수는 값(value)처럼 취급될 수 있음
변수에 할당하거나, 다른 함수의 인자로 전달하거나, 함수의 return값으로 사용할 수 있음
const sayHello = function() { return 'Hello'; };
console.log(sayHello()); // 'Hello'
const executeFunction = function(fn) {
return fn();
};
console.log(executeFunction(sayHello)); // 'Hello'
익명 함수와 함수 표현식
자바스크립트에서 익명 함수(이름 없는 함수)를 정의할 수 있음
함수 표현식에서 주로 사용되며, 필요에 따라 함수에 이름을 지정하지 않아도 됨
const add = function(a, b) {
return a + b;
};
console.log(add(2, 3)); // 5
(이 블로그의 다른 글: 함수 선언문과 함수 표현식의 차이점? https://developer-dreamer.tistory.com/152)
호이스팅
함수 선언식을 통해 선언한 함수는 코드가 실행되기 전 호이스팅 됨. 선언 전에 호출할 수 있음
함수 표현식은 변수에 할당된 후 사용할 수 있음
(이 블로그의 다른 글: 자바스크립트의 호이스팅 https://developer-dreamer.tistory.com/113)
console.log(declaredFunction()); // 'Declared Function'
function declaredFunction() {
return 'Declared Function';
}
// 함수 표현식은 할당 후에만 사용할 수 있음
const expressedFunction = function() {
return 'Expressed Function';
};
console.log(expressedFunction()); // 'Expressed Function'
클로저
클로저: 함수가 자신이 선언된 환경(scope)을 기억하고, 해당 환경에 접근할 수 있는 기능 혹은 특징
함수는 자신이 선언된 당시 스코프 내의 변수를 참조할 수 있음
(이 블로그에 관련 글: 클로저란? https://developer-dreamer.tistory.com/155)
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
화살표 함수
간결한 문법을 제공하고, this 바인딩에서 기존 함수와 다른 동작을 함
화살표 함수는 선언된 위치의 this 값을 유지하므로, 일반 함수와 달리 별도로 this를 바인딩할 필요가 없음
const obj = {
value: 42,
method: function() {
setTimeout(() => {
console.log(this.value); // 42 (Arrow 함수는 obj의 this를 유지)
}, 1000);
}
};
obj.method();
(이 블로그 관련 글: 자바 스크립트 ES6 버전이란? > 화살표 함수 도입 https://developer-dreamer.tistory.com/149)
출처
1. 매일메일. 250114. 자바스크립트 함수에 대해서 아는대로 설명해주세요. 33번. https://maeil-mail.kr
'개발자 강화 > 프론트엔드' 카테고리의 다른 글
🌟[매일메일] 자바스크립트의 Promise란? (FE.250129/250203) (1) | 2025.02.03 |
---|---|
[매일메일] 클로저란? (FE.241212) (1) | 2025.02.01 |
[매일메일] 함수 선언식과 함수 표현식의 차이점? (FE.250131) (0) | 2025.01.31 |
[매일메일] 자바스크립트 ES6 버전이란? (FE.250130) (0) | 2025.01.30 |
🌟[매일메일] 브라우저 렌더링 파이프라인이란? (FE.241224/241213) (0) | 2025.01.29 |