간단히 예제를 통한 함수와 스코프 더 잘 이해하기
Q. 다음 중 에러가 발생하는 코드는?
// 1번
{
function sayHi() {
console.log('Hi!');
}
}
sayHi();
-> 해당 코드는 함수 선언 방식이다. 함수 선언 방식은 함수 스코프를 가지기 때문에 코드블록 안에서 함수를 선언하더라도 코드 블록 밖에서 함수를 호출하여도 아무 문제없다.
// 2번
{
let sayHi = function () {
console.log('Hi!');
};
}
sayHi();
-> 코드 블록 안에서 함수 표현식 방식을 사용. 여기서 let 키워드 변수를 활용했기 때문에 블록 스코프를 가지므로 코드블록 밖에서 호출한 sayHi 함수는 사용 할 수 없다. 에러발생!
// 3번
sayHi();
function sayHi() {
console.log('Hi!');
}
-> 함수 선언 방식이고, 함수 선언문은 호이스팅이 되기 때문에 함수 선언 이전에 호출해도 코드가 정상적으로 동작한다.
// 4번
const sayHi = function() {
console.log('Hi!');
};
sayHi();
-> 함수 표현식 사용. 함수 선언 후 호출했으니 아무 문제 없이 코드가 잘 동작함