개발

[JavaScript] 스코프와 호이스팅에 대해 알아보자

썽연 2022. 3. 17. 17:02
728x90

스코프

JavaScript에서 scope(스코프)란 변수의 유효범위 라고 할 수 있다.

자바스크립트에서 스코프란 작성된 코드를 둘러싼 환경으로, 어떤 변수들에 접근할 수 있는지를 정의한다.

스코프는 크게 전역스코프와 지역스코프로 나뉠 수 있다.

전역스코프 ?

  • 함수 안에 포함되지 않은 곳에 정의하는 것으로 코드 어디에서든지 참조할 수 있다.

지역스코프 ?

  • 함수 내에 정의된 것으로 정의된 함수 내에서만 참조할 수 있다.

var는 전역 스코프, let과 const는 지역 스코프이다.

var num = 1;

function a() {
	var num = 2;
	console.log(num); 
}

a() // 2
console.log(num) // 1

위의 코드를 보면 a함수에서는 num이 2로 출력이 되며,

함수 밖에서는 num의 값이 1로 출력이 된다.

함수 내에서 var num = 2; 를 해주었기 때문에 2라고 출력이 되었으며, 저 코드가 없었더라면 1을 출력을 할 것이다.

이것은 함수스코프의 예시이고, let이나 const의 예시를 보자.

var pyo = 'jung min';

for ( pyo=0; pyo <5; pyo++){
	pyo+=pyo
}

console.log(pyo); // jung min;

호이스팅

변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징이다.

console.log(score); // undefined

var score; // 변수 선언

위 코드는 변수 선언 이전에 score를 출력하였다.

코드를 보면 score를 console로 찍는 부분에서 에러가 날 것이라고 생각할 수 있겠지만, undefined가 찍히는 것을 볼 수 있다.

이것은 변수 선언이 소스코드가 순차적으로 실행되는 런타임 이전 단계에서 먼저 실행된다는 증거이다!

728x90