function 함수명() {
실행 내용
}
let 함수명 = function() {
실행 내용
};
💡중요한 차이는, 함수 선언과 달리 함수 표현식의 경우 끝에 세미콜론
;
을 빼먹으면 안된다는 점이다
alert
을 통해 함수 내용을 출력할 수도 있다. 예시 :
function sayHi() {
alert( "Hello" );
}
alert( sayHi ); // 함수 코드가 보임
해당 예시에서 sayHi 옆에 괄호()
가 없기 때문에
함수가 실행되지는 않고 함수 코드만 문자열처럼 출력되게 된다.
let sayHi = function() { // (1) 함수 생성
alert( "Hello" );
};
let func = sayHi; // (2) 함수 복사
func(); // Hello // (3) 복사한 함수를 실행(정상적으로 실행됩니다)!
sayHi(); // Hello // 본래 함수도 정상적으로 실행됩니다.
콜백 함수를 활용하면 다음과 같은 형태가 가능하다.
예시
function ask(question, yes, no) {
if (confirm(question)) yes()
else no();
}
ask(
"동의하십니까?",
function() { alert("동의하셨습니다."); }, // yes일 경우 실행되는 ask의 콜백 함수
function() { alert("취소 버튼을 누르셨습니다."); } //no일 경우 실행되는 ask의 콜백 함수
);
자바스크립트 엔진이 함수를 생성하는 시점에 차이가 있다.
let age = prompt("나이를 알려주세요.", 18);
let welcome;
if (age < 18) {
welcome = function() {
alert("안녕!");
};
} else {
welcome = function() {
alert("안녕하세요!");
};
}
welcome(); // 제대로 동작합니다.
코드 블록 밖에서 변수를 선언하고
코드 블록 내에서 해당 변수에 함수 표현식을 정의하여 할당하면 된다.
💡 함수를 선언할 때 함수 선언문을 선택하는 것을 먼저 고려하고, 해당 방식이 부적절하거나 위의 예시와 같이 조건문 내에 사용해야 할 땐 함수 표현식을 사용하는 것이 좋다.