JavaScript

JS Hoisting(호이스팅), Scope(스코프)

차차한 2022. 7. 25. 09:05

호이스트 : 변수의 정의가 범위에 따라 선언 / 초기화 / 할당 분리되는 것을 의미함

  • 함수 내에서 변수가 정의되면 지역변수로
  • 함수 밖에서 변수가 정의되면 전역변수로 정의됨

출처 : https://velog.io/@marcus/Javascript-Hoisting

“First-Name” name == undefined → 함수 내에서 name이 선언/초기화 되어있지만 해당 라인보다 먼저 값을 불러 변수에 임의로 할당되어 있던 undefined를 호출함

  • undefined와 변수 is not defined는 다른 개념
  • undefined : 변수는 선언되었으나 초기화하지 않았거나 값이 할당되지 않은 경우
  • is not defined : 변수가 선언되지 않은 경우

“Last-Name” name == “Marcus” → name변수에 Marcus 문자열이 할당되어진 후에 name을 호출함

 

주의!

해당 코드의 선언변수를 let/const로 변경하면 is not defined가 뜬다

이는 변수가 호이스팅되지 않은 것이 아닌 TDZ때문인데 즉 코드 실행이 변수가 실제 있는 위치에 도달할 때까지 액세스할 수 없어서 이와 같은 현상이 발생한다.


스코프 : 범위. 어떤 변수들에 접근할 수 있는지를 정의함

함수 에 정의된 전역변수는 함수 안팎에서 모두 사용이 가능

함수 에 정의된 지역변수는 해당 함수 밖에서 사용할 경우 is not defined가 발생