20.1 strict mode?

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

function foo(){
	x = 10; // 선언하지 않은 x변수 -> 암묵적 전역 발생
}
foo();

console.log(x); //10

20.2 strict mode의 적용

'use strict'; // strict mode 활성화
'use strict'; // 전역에 선언해서 스크립트 전체가 strict mode로 실행된다

function foo(){
	x=10; // ReferenceError: x is not defined
}
foo();
function foo(){
	'use strict'; // 함수 몸체의 맨 앞에 위치해서 foo 함수 내부에서만 strict mode가 적용된다
	 // 함수 전역에는 적용되지 않는다.
	 x=10; // ReferenceError: x is not defined
	 // 변수 선언 해야한다. 
}
foo();
function foo(){	 
	 x=10; // 에러가 발생하지 않는다 (암묵적 전역 변수 생성)
	 'use strict'; // 함수 몸체의 첫 줄이 아니라서 무시된다. (문자열로 처리됨)
}
foo();

20.3 전역에 strict mode를 적용하는 것은 피하기

<!DOCTYPE html>
<html> 
<body>
	<script>
		'use strict'; // 다른 스크립트에 영향을 주지 않고 해당 스크립트에 한정되어 적용됨
	</script>
	<script>
		x = 1; // 에러가 발생하지 않는다.
		console.log(y);
	</script>
	<script>
		'use strict';
		
		y = 1; // ReferenceError: x is not defined
		console.log(y);
		</script>
</body>
</html> 
// 스크립트 단위로 적용된 strict mode는 다른 스크립트에 영향을 주지 않고 해당 스크립트에 한정되어 적용된다.
// 즉시 실행 함수의 선두에 strict mode 적용
(function () {
	'use strict';
	
	// Do something..
}());