선언식 -> function foo( ) { }
표현식 -> let foo = function ( ) { }
선언식은 호이스팅에 영향을 받지만
표현식은 영향을 받지 않는다.
그리고 표현식은 클로져사용, 콜백함수로 사용 등 장점이 많다.
(화살표 함수도 표현식과 같이 호이스팅 되지 않는다.)
JS에서 함수를 선언한 시점에 따라 상위 스코프를 결정한다는 뜻이며 다른말로 정적 스코프라고도 한다.
이부분은 this와ㄷ 관련이 있다.
var x = 1
function first() {
var x = 10;
second();
}
function second(){
console.log(x)
}
first()
second()
실행한 값은
1 , 1
이 나온다.
first( )를 했을 때 second 안의 x는 10 같지만 JS는 선언된 시점의 상위가 렉시컬스코프(정적스코프) 이므로 second의 상위는 global 스코프이다.
따라서 second 안의 x는 어디서든 1이다.