렉시컬 스코프

김승훈·2021년 2월 9일
0

JavaScript

목록 보기
7/16
var name = "홍길동";

function name1() {
  var name = "가나다";
  console.log(name);
  name2();
}

function name2() {
  console.log(name);
}
name1(); 
name2(); 
var name = "홍길동";

function name1() {
  name = "가나다";
console.log(name);
  name2();
}

function name2() {
  console.log(name);
}
name1(); 
name2();

렉시컬 스코프는 함수를 어디서 호출하는지가 아니라 어디에 선언하였는지에 따라 결정된다.

스코프 체인 -제로초 - https://www.zerocho.com/ 블로그참조

바로 전역변수와 지역변수의 관계에서 스코프 체인(scope chain)이란 개념이 나옵니다.
내부 함수에서는 외부 함수의 변수에 접근 가능하지만 외부 함수에서는 내부 함수의 변수에 접근할 수 없습니다. (아래 enemy가 undefined인 것을 보시죠) 그리고 모든 함수들은 전역 객체에 접근할 수 있죠. 위의 예제와 비슷한 예제를 하나 더 보여드리겠습니다.

var name = 'zero';
function outer() {
console.log('외부', name);
function inner() {
var enemy = 'nero';
console.log('내부', name);
}
inner();
}
outer();
console.log(enemy); // undefined
inner 함수는 name 변수를 찾기 위해 먼저 자기 자신의 스코프에서 찾고, 없으면 한 단계 올라가 outer 스코프에서 찾고, 없으면 다시 올라가 결국 전역 스코프에서 찾습니다.

다행히 전역 스코프에서 name 변수를 찾아서 'zero'라는 값을 얻었습니다.

만약 전역 스코프에도 없다면 변수를 찾지 못하였다는 에러가 발생합니다. 이렇게 꼬리를 물고 계속 범위를 넓히면서 찾는 관계를 스코프 체인이라고 부릅니다.

0개의 댓글