JavaScript_함수 다루기(3)

cindycho_0423·2023년 9월 4일
0

값으로서의 함수

자바스크립트는 함수를 특별한 종류의 값으로 취급한다.

const printJS = function () {
  console.log('JavaScript');
};

console.log(typeof printJs); // function

자바스크립트 함수의 구체적인 데이터 타입은 객체이며 어디에서나 할당될 수 있고 다양한 형태로 호출될 수 있다. 함수 표현식으로 함수를 선언하고 호출할 수도 있고, 객체 안의 메소드로 사용될 수도 있다. 객체 안에 프로퍼티로 선언하고, 프로퍼티에 접근해서 함수를 호출할 수도 있다. 흔하지는 않지만 배열에 담아서 함수를 호출하는 것도 가능하다.

이뿐만 아니라 값으로 평가되는 이 함수는 다른 함수의 파라미터로도 전달할 수가 있다. DOM 이벤트를 다룰 때 파라미터를 전달하는 부분에서 함수를 선언하는 것 뿐만 아니라 함수를 호출할 때 미리 선언된 함수를 전달하면서 조건에 따라 그 함수가 나중에 호출되거나 혹은 호출되지 않는 동작을 구현할 수도 있다.

다른 함수의 파라미터에 전달된 함수를 콜백 함수 (Callback Function)라고 부른다.

어떤 함수의 리턴값이 함수가 될 수도 있다.

함수를 리턴하는 고차 함수(High Order Function)라고 부른다. 고차 함수는 지금 본 것처럼 변수에 호출된 값을 할당해서 활용하기도 하지만 특별한 경우에는 이중 괄호를 사용해서 고차함수로 리턴되는 함수를 바로 호출할 수도 있다.

function getPrintHi() {
  return function () {
    console.log('Hi!?');
  };
};

getPrintHi()();

프로그래밍에서 이러한 다양한 특징을 가진 함수를 일급함수 (First Class Function)이라고 부른다. 그래서 자바스크립트는 일급함수를 가진 프로그래밍 언어라고 할 수 있다.

정리(1)

자바스크립트에서 typeof 연산자로 함수의 타입을 확인하려고 하면 function 이라는 문자열이 리턴된다. 그렇지만 함수는 엄연히 따지면 객체이다. 자바스크립트에서 함수는 선언 자체로도 값으로 평가될 수 있다. 그래서 변수에 함수 선언을 할당하는 함수 표현식이 가능했던 것이다.

자바스크립트에서 함수는 변수나 다른 데이터 구조 안에 할당할 수 있고, 다른 함수의 파라미터로 전달될 수 있다. 심지어 다른 함수의 리턴값이 될 수도 있다.

이런 조건을 모두 만족하는 함수를 일급 함수 (First-Class-function)이라고 부른다.

정리(2)

자바스크립트에서 함수는 변수나 다른 데이터 구조 안에 자유롭게 할당할 수가 있다. 그래서
1. 함수 표현식으로 함수를 만들거나,
2. 객체의 프로퍼티로 함수를 선언해서 메소드를 만들거나
3. 배열의 요소로도 만들 수 있다.

profile
https://linktr.ee/Hyunji_Cho 🐣

0개의 댓글