함수란 프로그램을 구성하는 기본적인 building block이다.
subprogram이라고도 불리우며 여러번 재사용이 가능하다.
특정 업무를 수행하거나 값을 계산한다.
함수 선언식
, 함수 표현식
)함수명()
)function sayHi1() { console.log(`hello yongmin`); } sayHi('hello yongmin') // hello yongmin
위 예제를 기준으로, function
키워드 이용, sayHi
라는 이름을 부여, console.log()
을 작성하였다.
이렇게 함수를 변수에 할당하지 않고 이름을 통해 작성하는 방법을 함수 선언식
이라고 한다.
sayHi()
을 통해 함수를 호출하면 함수가 실행이 된다.
하지만 매개변수가 없으므로 해당 함수는 hello yongmin
이라는 결과값만 출력하게 된다.
따라서 매개변수를 사용하여 다음과 같이 사용할 수 있다.
function sayHi2(hello) { console.log(hello); } sayHi('hello yongmin') // hello yongmin
hello
라는 매개변수를 지정하여 전달된 값에 따라 출력값이 변할 수 있도록 작성할 수있다.✔ 매개변수란 함수에 투입되는 변수를 의미한다. 즉 투입 값에 따라 결과값이 달라지는데 이러한 인자를 뜻한다.
const sayHi = function () { console.log(`hello yongmin`); }; sayHi() // `hello yongmin`
함수를 선언하면서 변수에 할당하게 되는데, 이러한 함수 선언 방식을 함수 표현식
이라 한다.
호출 방식은 sayHi()
처럼, 할당한 변수
에 ()
를 붙여 호출한다.
함수 선언식
의 경우 var
변수처럼 선언 이전에 호출 시 에러가 뜨지 않지만, 함수 표현식
의 경우 let, const
처럼 선언 이전에 호출할 경우 참조 오류가 발생한다. (호이스팅때문)
function askName(name, sayYes, sayNo) { if (name === 'yongmin') { sayYes(name); } else { sayNo(name); } } const sayYes = function (name1) { console.log(`hello ${name1}!`); }; const sayNo = function (name2) { console.log(`hey ${name2}, who are you?`); }; askName(`yongmin`, sayYes, sayNo); // hello yongmin! askName(`smith`, sayYes, sayNo); // hey smith, who are you?
function expression
으로 표현된 함수들은, 매개변수 인자로 전달될 수 있다.()소괄호
없이 전달해야 한다.const sayHi = function () { console.log(hi); }; sayHi() // hi
⬇
const sayHi = () => console.log(hi); sayHi() // hi
✔ 동일한 함수이다.
arrow function
은 기존 함수의 선언 구문을 비교적 간단하게 나타낼 수 있다.
(function
키워드 제외, 블록{}
제외)
anonymous function
, 즉 함수 표현식
의 이름이 없는 함수에게만 적용이 가능하다.
const add = function (a, b) { return a + b; }; const result = add(1, 2); console.log(result); // 3
⬇
const add = (a, b) => a + b; const result = add(1, 2); console.log(result); // 3
위처럼 덧셈을 하는 함수의 경우도 더욱 간결하게 코드를 작성할 수 있다.
단 코드가 한줄로서 간단할 경우 {} 블록
을 사용하지 않고 작성해도 되지만, 필요할 경우 return
값을 꼭 표기해주어야 한다.
const add = (a, b) => { return a + b }; const result = add(1, 2); console.log(result); // 3
✔
{}블록
을 사용 했을 때,return
을 사용한다!!!!
용민님 요 며칠간 진짜 많이 쓰셨네요 !!! 👍 저는 아직 함수 선언문이 함수 표현식 같고 함수 표현식이 함수 선언문 같고 이름이 헷갈려요 😭