카테고리 없음

[기본 문법]자바스크립트 함수 표현식과 선언문

Giant Oreo 2021. 6. 16. 15:22

함수 표현식

let sum = function(a, b){
	return a+b;
}

 

함수 선언문

function sum(a, b){
	return a+b;
}

 

둘의 차이점이 뭘까?

 

차이점은 자바스크립트 엔진이 언제 함수를 생성하는지에 있다.

표현식은 실제 실행 흐름이 해당 함수에 도달했을 때 함수를 생성하는 반면에,

선언문은 정의되기 이전에 호출할 수 있다.

 

이게 가능한 이유는 뭘까?

자바스크립트는 스크립트를 실행하기 전, 준비단계에서 전역에 선언된 함수 선언문을 찾고, 해당 함수를 생성한다. 

함수 선언문이 처리된 이후 스크립트가 실행되는 구조이다.

 

 

그런데, 엄격 모드에서 함수 선언문이 코드 블록 내에 위치하면 해당 함수는 블록 밖에서는 접근하지 못한다.

아래와 같은 코드에서 say()함수는 실행되지 않는 것이다.

let country = prompt("한국 사람인가요?(예/아니오)",예);

if(country=="예"){
	function say(){
    	alert("안녕하세요");
    }
}else{
	function say(){
    	alert("Hi");
    }
}

say();  // Error: say is not defined

이럴 때는 표현식을 if문 안에서 사용하면 코드블록 밖에서도 접근이 가능하다.