개발

js 일급 객체로서의 함수

explosion149 2024. 11. 5.

 

JavaScript에서 함수는 일급 객체(First-Class Object)로 취급됩니다. 
이는 함수가 다른 객체와 동일한 방식으로 다루어질 수 있음을 의미합니다.

 

 

 

 

일급 객체의 특성

 

변수에 할당 가능: 함수를 변수에 할당할 수 있습니다.

 

const greet = function() {
    console.log("안녕하세요!");
};

 

 

함수의 인수로 전달 가능: 함수를 다른 함수의 인수로 전달할 수 있습니다.

function executeFunction(fn) {
    fn(); // 전달받은 함수를 실행
}

executeFunction(greet); // "안녕하세요!" 출력

 

함수의 반환값으로 사용 가능: 함수를 다른 함수에서 반환할 수 있습니다.

function createGreeter(greeting) {
    return function(name) {
        console.log(`${greeting}, ${name}!`);
    };
}

const sayHello = createGreeter("안녕하세요");
sayHello("홍길동"); // "안녕하세요, 홍길동!" 출력

 

객체의 프로퍼티로 저장 가능: 함수를 객체의 프로퍼티로 저장할 수 있습니다.

const person = {
    name: "홍길동",
    greet: function() {
        console.log(`안녕하세요, 저는 ${this.name}입니다.`);
    }
};

person.greet(); // "안녕하세요, 저는 홍길동입니다." 출력

 

 

함수 표현식과 함수 선언

JavaScript에서 함수는 두 가지 방식으로 정의할 수 있습니다.

함수 선언과 함수 표현식.

두 방식 모두 함수가 일급 객체임을 보여줍니다.

 

 

함수 선언

const add = function(a, b) {
    return a + b;
};

 

 

함수 표현식

const add = function(a, b) {
    return a + b;
};

 

 

고차 함수 (Higher-Order Functions)

 

일급 객체로서의 함수의 중요한 응용 중 하나는 고차 함수입니다. 

고차 함수는 다른 함수를 인수로 받거나, 함수를 반환하는 함수입니다.

 

function map(array, callback) {
    const result = [];
    for (let i = 0; i < array.length; i++) {
        result.push(callback(array[i]));
    }
    return result;
}

const numbers = [1, 2, 3];
const squares = map(numbers, function(num) {
    return num * num;
});

console.log(squares); // [1, 4, 9] 출력

 

 

클로저 (Closure)

function makeCounter() {
    let count = 0; // private variable
    return function() {
        count++;
        return count;
    };
}

const counter = makeCounter();
console.log(counter()); // 1
console.log(counter()); // 2
console.log(counter()); // 3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'개발' 카테고리의 다른 글

js Set  (0) 2024.11.05
js Map  (0) 2024.11.05
js ES6  (0) 2024.11.05
js break와 continue  (0) 2024.11.05
js for문  (1) 2024.11.05

댓글

💲 추천 글