JavaScript에서 함수를 정의하는 방법은 여러 가지가 있습니다. 그중에서 가장 대표적인 함수 정의 방법인 함수선언문과 함수표현식을 배워보도록 하겠습니다.
먼저 문자열 ‘hello world’를 출력하는 함수를 함수선언문으로 정의해 보겠습니다.
// 함수선언문으로 정의한 함수
function greeting () {
console.log('hello world')
};
함수의 이름 // greeting
괄호 안에서 쉼표로 분리된 함수의 매개변수 목록 // ( 소괄호 안에 작성 )
중괄호 { } 안에서 함수를 정의하는 자바스크립트 표현 // { 중괄호 안에 작성 }
함수표현식으로 똑같은 함수를 정의해 보겠습니다.
// 함수표현식으로 정의한 함수
let greeting = function () {
console.log('hello world')
};
함수표현식은 변수를 선언할 때 사용했던 let 키워드를 사용해서 변수를 선언하고, 함수를 할당하는 형태로 코드를 작성하면 됩니다. 이때, 함수선언문과는 달리, 함수에는 특별한 식별자를 지정할 필요가 없습니다. JavaScript에서는 이처럼 함수를 변수에 할당하는 것이 가능합니다. 그리고 이렇게 변수에 함수를 할당한 것과 같은 형태로 함수를 정의하는 것을 함수표현식이라고 합니다.
함수선언문
함수 선원 키워드인 function으로 함수를 '선언'
함수표현식
변수에 함수를 할당하여 함수를 "표현"
함수 호출
함수를 정의하는 것은 함수를 실행하는 것이 아닙니다. 함수를 정의하는 것은 간단히 함수의 이름을 지어주고, 함수가 호출될 때 무엇을 할지 지정 해주는 것입니다. 사실 함수를호출하는 것은 나타나있는 매개변수를 가지고 지정된 행위를 수행하는 것입니다.
예를 들어, 함수square를 정의한다면, 함수를 다음과 같이 호출할 수 있습니다.
square(5);
위의 문장은 5라는 인수를 가지고 함수를 호출합니다. 함수는 이 함수의 실행문을 실행하고 값 25를 반환합니다.
function square(n) {
return n*n
}
console.log(square(5)); /// 25
다시 말해, 함수 호출이란 함수를 실행시키는 명령을 전달하는 것과 같습니다.
매개변수와 전달인자
매개변수는 함수를 정의할 때 선언하고, 함수 코드 블록 안에서 변수처럼 취급됩니다. 앞서 설명한 것처럼 함수를 정의할 때 소괄호(())에 매개변수를 추가할 수 있습니다. 이렇게 추가된 매개변수는 함수 내부에서 마치 변수와 같은 역할을 하게 됩니다.
function greeting (name) {
console.log('hello ' + name);
}
greeting이라는 이름의 함수가 name이라는 매개변수를 가지고 있습니다. 현재는 아무것도 할당되어 있지 않으므로, 매개변수 name은 undefined로 초기화되어 있습니다. 함수를 호출할 때 소괄호 안에 값을 넣음으로써 매개변수에 값을 할당할 수 있습니다. 이것을 바로 전달인자라고 합니다. 호출할 때 전달한 'kimcoding'이라는 문자열이 함수 내부에서 매개변수 name에 할당된 것을 확인할 수 있습니다. 이처럼 매개변수와 전달인자를 활용하면 함수 외부에서 함수 내부로 값을 전달할 수 있습니다.