자바스크립트의 함수는 작업을 수행하거나 값을 계산하는 빌딩 블록으로, 일급 객체다.

일급 객체는 다음 조건에 만족해야 한다.

  1. 변수나 데이터 구조 안에 담을 수 있다.
  2. 파라미터로 전달할 수 있다.
  3. 반환 값(return value)으로 사용할 수 있다.
  4. 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
  5. 동적으로 프로퍼티 할당이 가능하다.

함수 선언
함수 선언은 다음과 같은 함수 키워드로 구성되어 있다.

  1. 함수의 이름
  2. 괄호 안에서 쉼표로 분리된 함수의 매개변수 목록
  3. 중괄호 { } 안에서 함수를 정의하는 자바스크립트 표현

function functionName(parameter1, parameter2 ){
 함수가 호출되었을 때 실행되는 구문
}
functionName() // 함수 호출

▼ 함수 sum은 num1과 num2라는 매개변수를 가진다.
함수 sum를 호출할 때 숫자 1,2를 매개변수를 통해 함수로 전달하여 반환한다.

함수 표현식
함수 표현식에 의해 이름이 없는 함수(익명)를 정의할 수 있으며, 그 함수를 변수에 할당한다.
함수 이름을 지정할 수 있으며, 함수 내에서만 사용할 수 있다.

var x = function(parameter1, parameter2){
 함수가 호출되었을 때 실행되는 구문
}

▼ 변수 sum을 통해 호출할 수 있다.

호이스팅
함수 선언과 함수 표현식의 차이점은 호이스팅에 있다.
호이스팅이란 자바스크립트가 컴파일 단계에서 변수 및 함수 선언을 메모리에 저장하는 방식이다.
함수 선언은 호이스팅이 되고, 함수 표현식은 호이스팅이 되지 않는다.

▼ 함수 선언인 함수 declaration는 실행 전 메모리에 저장되어 있기 때문에 실행되지만, 함수 표현식인 변수 expression는 호이스팅이 되지 않기 때문에 정의되지 않아 실행되지 않는다.