암묵적 전역

function foo() {
  x = 10;
}
foo();
console.log(x); // 10

/*
- foo 함수가 실행
- foo 함수 내부에서 x를 선언한 것은 없기 때문에, 스코프 체인에 의해 변수 x를 검색한다.
- 전역 스코프까지와 왔지만, x는 존재하지 않는다. -> 자바스크립트 엔진은 암묵적으로 전역 객체에 x 프로퍼티를 동적 생성한다.
- 생성된 전역 객체에 x 프로퍼티에 10을 할당한다.
- foo 함수의 실행이 끝나고, console 에 암묵적으로 생성된 x를 참조하여 10이 출력된다.
*/

strict mode

자바스크립트 언어의 문법을 좀 더 엄격히 적용하여 오류를 발생시킬 가능성이 높거나, 자바스크립트 엔진의 최적화 작업에 문제를 일으킬 수 있는 코드에 대해 명시적인 에러를 발생시킨다.

strict mode 적용

전역의 선두 or 함수 몸체의 선두에 use strict 를 추가한다.

// 전역에 strict mode 선언
'use strict'
...
function foo() {
	// 함수 몸체 선두에 strict mode 선언
  'use strict'
	...
}

전역에 strict mode 는 피하자.

전역에 적용한 strict mode스크립트 단위로 적용된다.

// 즉시 실행함수 내부에서 use strict 적용
(function() {
  'use strict';

  // code ...
}())