호이스팅(hoisting)은 var변수나 function declaration(함수 선언)들이 자동적으로 제일 위로 올라가는 것이라고 생각하면 된다. 호이스팅이 된 이후 부터 코드가 나타난 순서대로 자동적으로 실행이 된다.
예를들어 함수 표현식으로 매개변수 두 개를 더해서 출력하는 식을 아래와 같이만들면 참조에러 메시지가 나온다.
add(1, 2);
let add = function(a, b) {
console.log(a+b)}; // ReferenceError: add is not defined
함수 표현식은 호이스팅이 되지 않기 때문에 첫 줄에서 add(1, 2)를 실행해야 되는데, 아직 add 함수가 표현되지 않았기 때문에 참조를 못하는 것이다.
add표현식을 함수 선언식으로 바꾼다면
add(1, 2); // 3
function add(a, b) {
console.log(a+b)};
3이라는 결과가 출력된다. 함수 선언식은 자동적으로 제일 위로 올라가는 호이스팅이 일어나기 때문이다.
자바 스크립트는 위와 같은 코드를 아래와 같이 읽게된다.
function add(a, b) {
console.log(a+b)};
add(1, 2); // 3
switch문은 하나 이상의 case문으로 구성한다. default문도 있는데, 이것은 case에 부합되는 것이 하나도 없을때 기본값으로 지정하는 방법으로, if문에서 마지막 else문이라고 생각하면 편할 것이다.
let age = 27
if(age > 19 ) {
alert( "22시 이후에도 피씨방을 이용할 수 있습니다." );
} else if( age < 19 ){
alert( "22시가 되었으니 귀가해주시기 바랍니다." );
} else {
alert( "둘 다 아니라면 올해 19세가 되셨겠군요." );
}
이런식으로 피씨방에서 알람창을 만들었다고 생각해보자.(마지막 문구는 default를 보여주기 위해 age=== 19로 할수도 있지만 바꿔서 넣었다.)
위의 if문이 실행되면 age가 19이상이니, "22시 이후에도 피씨방을 이용할 수 있습니다."라는 문장이 나올 것이다.
한번 주제인 switch로 바꿔서 써보겠다.
let age = 27
switch (age) {
case ( age > 19 ):
alert( "22시 이후에도 피씨방을 이용할 수 있습니다." );
break;
case( age < 19 ):
alert( "22시가 되었으니 귀가해주시기 바랍니다." );
break;
default:
alert( "둘 다 아니라면 올해 19세가 되셨겠군요." );
}
이런식으로도 가능하다는 얘기다.