호이스팅
- 호이스팅 이란?
- 자바 스크립트 에서 변수와 함수선언이 실행전에 해당 범위의 맨 위로 끌어올려지는 행동이다.
호이스팅은 코드 작성시 유연성을 제공하지만, 이해하지 못하고 사용하면 예기치 않은 오류가 발생할 수 있다.
- 변수 호이스팅
- 변수선언 은 코드 실행전에 해당 범위의 맨 위로 호이스팅 되지만 변수 할당은 호이스팅되지 않는다.
특히 Var 키워드로 선언된 변수에서 중요하게 작용한다.
- 변수 호이스팅 예시
위 값은 아래와 같이 해석할수있다.
console.log(a) // undefined
var a = 5
console.log(a) // 5
▼
var a
console.log(a) // undefined
a=5
console.log(a) // 5
추가 설명
var 키워드가 호이스팅 되어 var a 가 맨 위로 올라가지만 a의 할당값은 호이스팅 되지않아 1번 콘솔은 undefined값을 출력하고, a=5의 값이 할당된 2번 콘솔에서는 5 를 출력한다.
let 과 const 키워드로 선언된 변수도 호이스팅 되지만 초기화 되기 전에는 접근할수 없다.
이것을 일시적 사각지대 (Temporal Dead Zone, TDZ) 라고 한다.
- 함수 호이스팅
- 함수 선언식과 함수 표현식으로 나누어 진다.
- 함수선언식
- 전체 함수가 호이스팅 된다.
따라서 함수 선언 전에 호출할수 있다.
- 함수 선언식 예시
name() // '홍길동'
function name(){
console.log('홍길동')}
▼ 위 코드는 아래와 같이 해석할수있다.
function name(){
console.log('홍길동')}
name()// '홍길동'
추가설명
함수 선언 자체가 호이스팅 되어 위로 올라가기 때문에 문제 없이 name() 은 '홍길동' 을 출력한다.
- 함수 표현식
- 함수 표현식은 호이스팅 되지 않기 때문에 변수에 할당되기전에는 호출할 수 없다.
- 함수 표현식 예시
name() // TypeError
var name = function(){
console.log('홍길동') }
▼ 위 코드는 아래와 같이 해석할수있다.
var name
name()// TypeError
name=function(){
console.log('홍길동') }
추가설명
var name 이 호이스팅 되어 위로 올라가지만 함수 표현식은 호이스팅 되지 않기 때문에 변수에 할당되지않은 name() 은 TypeError 에러를 일으킨다.
- 결론
이처럼 호이스팅은 잘 이용하면 코드작성이 더 유연해 질수는 있지만 예상치 못한 오류를 방지하기 위해 신중하게 사용 하여야 한다.
'JavaScript' 카테고리의 다른 글
'?' 연산자,삼항 연산자 (0) | 2024.07.19 |
---|---|
전개 구문(Spread Syntax) ,자주 쓰이는 메소드 (0) | 2024.07.18 |
조건문,반복문 (0) | 2024.07.16 |
논리연산자 (0) | 2024.07.15 |
NaN, 함수(Function),불리언 연산 (1) | 2024.07.12 |