<aside>
💡 학습주제
strict mode 알아보기
</aside>
자바스크립트 문법을 엄격히 적용해서 오류를 발생시킬 가능성이 높은 코드에 대해
명시적인 에러를 발생시킬 수 있는 것
테스트 함수 내부에서 x 변수가 선언된적 있는지 검사한다. ⇒ let, var, const 키워드를 사용해서 선언하지 않았기 때문에 검사에 실패.
테스트 함수의 상위 스코프 ( 여기서는 전역 스코프) 에서 x 변수가 선언된적 있는지 검사한다. ⇒ 전역에서도 x 변수의 선언이 없기때문에 검사에 실패
적용 전
function 테스트(){
x = 10;
}
테스트();
console.log(x) // 10 출력
검사에 실패했기 때문에 Reference에러를 발생시킬 것 같지만 암묵적으로 전역객체에 x 프로퍼티를 만들게 된다.
따라서 전역객체의 x 프로퍼티는 전역변수처럼 사용할 수 있게 되는데 이러한 현상을 암묵적 전역 ( implicit global ) 이라고 한다.
console.dir(window)
console.log(window.x) // 10 출력
window객체 내부에 x가 10으로 적용되어 있는것을 확인할 수 있다.
적용 후
'use strict'
function 테스트(){
x = 10;
}
테스트();
console.log(x) // Uncaught ReferenceError: x is not defined at line 4 col 5
strict mode를 'use strict'를 위와 같이 전역의 가장 상위에 적용시켜주면 이제 암묵적 전역이 발생되지 않고, 에러가 발생한다.