ren+gin+eer
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 |