★ 자바스크립트는 선언적 함수를 읽은 후 다시 위로 올라와 모든 코드를 읽음 ★

●함수선언문(더 많이쓰임)

 - 정의 되기 전에 위에서 사용가능 (∵ 브라우저가 함수를 먼저 읽기 때문에)

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

●함수표현식 - 호이스팅에 의해 sum은 함수가 아닌 변수로 선언되어 호출순서에 따라 함수 실행이 안될수도 있음.

 - 정의 되기 전에 위에서 사용 불가능. (∵브라우저가 함수를 읽은 후 변수를 읽기 때문에 함수가 정의된 변수를 읽기전에 함수를 실행하기에 읽지 못함)

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

●호이스팅(hoisting) : 끌어올리다

 - 자바스크립트 함수 안에 있는 선언들을 모두 끌어 올려 유효범위(함수블록 {} 안)의 최상단에 선언하는 것(할당은 X)

foo();
foo2();		// ERROR!!

function foo() { // 함수선언문
	console.log("hello");
}
var foo2 = function() { // 함수표현식
	console.log("hello2");
}

↓Hoisting

var foo2 = function() { [Hoisting] 함수표현식
	console.log("hello2");
}

foo();
foo2(); 

function foo() {
	console.log("hello");
}