본문 바로가기

javascript

Lexical Scope + implicit global

Lexical Scope + implicit global


Lexical Scope + implicit global 조합된 코드는 Lexical Scope 를 이해하는 과정에서 보는 것보다 

Lexical Scope 를 이미 이해한 상황에서 보는 것이 좋다.


var x = 1;
function foo() {
x = 0;
bar();
}
function bar() {
console.log(x);
}
foo();
bar();

앞서 작성했던 글에서 본 lexical scope 에 따르면 아래와 같아야 한다.

foo(); // 1
bar(); // 1

결과는 아래와 같다.

foo(); // 0
bar(); // 0


함수 foo() 안에 선언된 x는 함수 블럭 스코프에 할당(선언도 마찬가지)됐음에도 var 키워드가 없기 때문에 scope chain을 통해 global scope의 x 를 참조한다. 

x = 0; 은 변수 선언이 아니라 할당이다. 함수 블럭 스코프 내 변수 선언/할당은 var x = 0; 이다.

var 하나로 결과가 달라졌다.

var x = 1;
function foo() {
var x = 0;
bar();
}
function bar() {
console.log(x);
}
foo();  // 1
bar(); // 1

두 개념을 확실히 인지 못한 상태에서 결합된 코드를 본다면 lexical scope와 implicit global을 혼동할 여지가 있다.

'javascript' 카테고리의 다른 글

this  (0) 2019.03.28
cytoscape  (0) 2019.03.26
console.log  (0) 2019.03.24
Lexical Scope  (0) 2019.03.22