JavaScript Scope

geun·2024년 4월 8일
0

JavaScript

목록 보기
11/12
post-thumbnail

JavaScript

Scope

Scope(스코프)란?

  • 정의 : "식별자 접근 규칙에 따른 유효 범위"
  • 변수, 함수, 클래스 식별자에 따라 접근할수 있는 범위가 다르다.
  • 그 범위는 중괄호 혹은 함수에 의해 나뉜다
  • 그 범위를 스코프라고 한다

Scope 규칙

  • 스코프는 안쪽 > 바깥쪽 접근은 가능하나, 반대는 불가능 하다
  • 스코프는 중첩이 가능하다
  • 가장 바깥쪽 스코프를 전역 스코프, 그 외에는 지역 스코프라 한다.
  • 지역 스코프에서 선언한 변수를 지역 변수, 전역 스코프에서 선언한 변수를 전역 변수라 하는데, 지역 변수가 전역 변수보다 우선 순위가 높다.

Block Scope vs Function Scope

Function Scope

자바스크립트는 기본적으로 함수 스코프를 따르며, 새로운 함수가 생성될 때 마다 새로운 스코프가 발생된다.

if(5 > 4) {
	let secret = '12345';
}
console.log(secret)

위의 경우, 함수가 선언되지 않았기 때문에 새로운 스코프가 형성되지 않는다. 따라서 어디서나 secret변수에 접근이 가능하다.

function a() {
	let secret = '12345';
}
console.log(secret)

위의 경우, 함수 선언과 동시에 a함수에 대한 새로운 스코프가 생성된다. 따라서 함수 바깥에서 지역변수인 secret에 접근하려고 하면 오류가 발생한다.

Block Scope

블록 스코프는 { } 중괄호에 의해 생성되는 스코프이다. 원래 자바스크립트는 함수 스코프를 따랐지만, let, const 변수에 등장으로 블록 스코프를 형성할 수 있게되었다.

function loop() {
	for(var i = 0; i < 5; i++) {
		console.log(i);
	}
	console.log('final',i);
}
loop();

다음과 같은 경우 var은 함수 스코프를 따르기 때문에, i는 { }중괄호 밖에 있음에도 불구하고 접근할 수 있다.

function loop() {
	for(let i = 0; i < 5; i++) {
		console.log(i);
	}
	console.log('final',i);
}
loop();

위 코드에서 var를 let으로 바꿨을 뿐인데, let은 블록 스코프를 따르기 때문에, { } 밖에서 접근이 불가능해져서 마지막 final을 출력할 때 오류가 발생하게 된다.

참고자료 : https://soldonii.tistory.com/63

0개의 댓글