렉시컬 스코프

:D ·2021년 11월 30일
1

JavaScript✌️

목록 보기
2/14
post-thumbnail

📌 You don't know JS와 https://poiemaweb.com/ 를 참고하여 작성한 글입니다.

렉시컬 스코프란 무엇인가요?! 🤔

렉시컬 스코프는 렉싱타임에 정의되는 스코프입니다. 렉싱은 컴파일러 과정 중 첫번째로, 소스코드 문자열을 분석하여 상태 유지 파싱의 결과로 생성된 토큰에 의미를 부여하는것 입니다.

더 쉽게 설명해보자 😊

프로그래머가 코드를 짤 때 변수와 스코프 블록을 어디서 작성하는가에 기초해서 렉서가 코드를 처리할 때 확정되는것입니다. 즉, 함수를 어디서 선언하였는지에 따라 상위 스코프를 결정한다는 뜻이며, 가장 중요한 점은 함수의 호출이 아니라 함수의 선언에 따라 결정된다는 점입니다.

렉시컬 스코프를 더 잘 이해하기 위한 예시

var x = 1; 

function first() {
  var x = 10;
  second();
}

function second() {
  console.log(x);
}

first();
second();

뭐가 출력될까요?

10 1 이라고 생각하셨나요? 사실은 1 1 입니다. 😲

왜 그럴까? 🤔

자바스크립트는 렉시컬 스코프(Lexical Scope)를 따르므로 함수를 선언한 시점에 상위 스코프가 결정됩니다. 그렇기 때문에, second() 함수가 first() 함수 안에서 호출된 것과 상관없이 second() 함수는 global 범위에 선언되어 있으므로, global 범위에 있는 변수 x의 값 1이 두 번 출력된 것이다.

💁 추가내용

스코프는 두가지 방식으로 동작하는 데 첫번째 방식이 방금 말한 렉시컬스코프이고 두번째 방식은 동적 스코프이다. 동적 스코프는 함수의 호출에 따라 상위 스코프가 정해지는 것입니다. 대부분의 언어 C,Java,Python등이 렉시컬 스코프를 따른다고 합니당!!

profile
강지영입니...🐿️

0개의 댓글