use strict 모드를 반영하지 않을 경우
일반적인 자바스크립트 작동 방식이다. (암묵적 전역 현상)
function foo(){
x = 10;
}
foo();
console.log(x); // 10
1. foo 함수가 실행된다.
2. foo 함수 내부에서 x를 선언한 것은 없기 때문에 스코프 체인에 의해 변수 x 검색
3. 전역 스코프 까지 왔지만 x는 존재하지 않는다.
4. 전역 스코프까지와 왔지만, x는 존재하지 않는다. -> 자바스크립트 엔진은 암묵적으로 전역 객체에 x 프로퍼티를 동적 생성한다.
5. 생성된 전역 객체에 x 프로퍼티에 10을 할당
6. foo 함수의 실행이 끝나고, console 에 암묵적으로 생성된 x를 참조하여 10이 출력된다.
// 전역에 strict mode 선언
'use strict'
...
function foo() {
// 함수 몸체 선두에 strict mode 선언
'use strict'
...
}