Q. Scope란?

자바스크립트에서 Scope는 변수에 접근할 수 있는 범위이다.

크게 global(전역)스코프, local(지역)스코프 2가지가 있다.

전역 스코프는 전역에 선언되어 있어 어느 곳에서나 해당 변수에 접근할 수 있고, 

지역 스코프는 해당 지역에서만 접근할 수 있다.

 

JS에서 함수도 지역 스코프에 해당한다.

함수를 선언하면 선언할 때 마다 새로운 스코프를 생성하고 이를 '함수 스코프' 라고도 한다.

(그냥 지역 = 함수 스코프라고 봐도 되는 부분인듯)

아래 예를보면,

var a = 1; // 전역 스코프

function print() { // 지역(함수) 스코프
 var a = 123;
 console.log(a);
}

console.log(a); // 1
print(); // 123;

  (scope를 더 정확하게 이해하려면 이전 글에 있는 실행 컨텍스트(execute context) 내용을 선행해야 하는 부분인듯)

console.log(a) 가 1 인건 동의 할 거고 

print() 가 123인건 (JS 엔진이 실행 컨텍스트에서 객체를 생성해) 변수 a를 먼저 지역 스코프에 있나 확인해보고 있으면

지역 스코프의 값 a = 123을 할당하고

변수 a를 print 함수 안에서 선언하지 않았다면(Scope Chain에 의해)

전역 스코프에 있는 a = 1;을 할당했을거다.

 

기존 var의 경우 함수 스코프를 가졌기 때문에 함수 내에서만 지역변수가 유지되는 문제가 있었는데,

ES6에서 let, const 키워드가 추가되면서 함수가 아닌 일반 블록 { var a = 123; } 에서도 지역변수를 선언할 수 있게됨 

 


추가 단어 설명!

실행 컨텍스트 란(execute context)

=> 자바스크립트 코드가 실행되고 연산되는 범위를 나타내는 추상적인 개념

 우리가 코드를 작성하고 실행한다면 실행 컨텍스트 내부에서 실행되고 있는 것. 즉, 코드들이 실행되기 위한 환경이자 하나의 박스 컨테이너라 볼 수 있음!

 

스코프 체인Scope Chain 이란

유효 범위를 나타내는 scope는 scope 프로퍼티로 각 함수 객체 내에서 연결리스트 형식으로 관릳뢰는데,

이 scope 간의 상하관계를 스코프 체인이라 한다.

 


오늘은 '다정한 것이 살아남는다' 읽을 거지롱 오늘부터 무신사 블프하넹.. 돈도 없는데 흙흙ㅠ

 

TypeScript 공부하고 면접 질문지 작성하다보니까 책 거의 못읽음~! 요새 자꾸 배나오는거 같아서 다시 헬스 열심히 가려고 한다. 저번주에 3번갔는데 너~~무 오랜만에 가서 첫날하고 3일동안 근육통이 좀 있어서 괴로웠다.. 이번주부터는 주 5일 뿌셔야지. 아니 밥먹는시간이 너무 애매해 스터디카페에서 공부하니까 집 왔다갔다 하면 1시간30분 홀랑이넹 밥차리고 설거지하고 하니까 금방이여 증말.. 그래서 당분간 저녁 스킵하고 공부하다가 바로 헬스장 가는 걸로! 여기 커피랑 후레이크 믹스 같은거 있어서 너무 좋음 최고최고b

+ Recent posts