JavaScript 2.3
엄격 모드
- 자바스크립트는 기존의 기능을 변경하지 않고 새로운 기능을 추가시켜왔다.
- ECMAScript5(ES5)가 등장한 이후 새로운 기능이 추가되고 기존 기능 중 일부가 변경되었따.
- 기존 기능을 변경하였기 때문에 하위 호환성 문제가 생길 수 있었다.
- 그래서 변경 사항 대부분은 ES5의 기본 모드에선 활성화되지 않도록 설계되었다.
- 대신 use strict 라는 특별한 지시자를 사용해 엄격 모드(strict mode)를 활성화 했을때만 이 변경 사항이 활성화되게 해놓았다.
- 기존 기능을 변경하였기 때문에 하위 호환성 문제가 생길 수 있었다.
use strict
- 지시자 “use strict”는 단순한 문자열처럼 생겼지만 이 지시자가 스크립트 최상단에 오면 스크립트 전체가 모던한 방식으로 동작한다.
"use strict";
// 이 코드는 모던한 방식으로 실행됩니다.
- 지시자 use strict는 스크립트 최상단이 아닌 본문 맨 앞에 올 수도 있다.
- 이렇게 하면 오직 해당 함수만 엄격 모드로 실행된다.
“use strict” 는 반드시 최상단에 위치시킨다.
- 스크립트 최상단에 있지 않으면 엄격 모드가 활성화되지 않을 수도 있다.
- 다음 코드에서는 엄격 모드가 활성화되지 않는다.
alert("some code");
// 하단에 위치한 "use strict"는 스크립트 상단에 위치하지 않으므로 무시됩니다.
"use strict";
// 엄격 모드가 활성화되지 않습니다.
- use strict를 취소할 방법은 없다.
- 일단 엄격 모드가 적용되면 돌이킬 방법은 없다.
브라우저 콘솔
- 브라우저 콘솔을 사용하는 경우 기본적으로 엄격 모드가 적용되어 있지 않다
- 콘솔에서 엄격 모드를 사용하기 위해서는 ‘use strict’를 입력한 후, 쉬프트 + 엔터 키를 눌러 줄바꿈 해 원하는 스크립트를 입력한다.
'use strict'; <Shift+Enter를 눌러 줄 바꿈 함>
// ...테스트하려는 코드 입력
<Enter를 눌러 실행>
- 이 기능은 파이어폭스와 크롬같은 유명 브라우저에서 대부분 사용 가능하다
- 브라우저가 오래되어 콘솔 창에 use strict를 입력하는 것이 불가능하다면 래퍼로 감싸면 된다.
(function() {
'use strict';
// ...테스트하려는 코드...
})()
‘use strict’를 꼭 사용해야하나?
- 모던 자바스크립트는 클래스와 모듈이라는 구조를 제공한다.
- 이 둘을 사용하면 엄격 모드가 자동으로 적용된다.
- 따라서 이 둘을 사용하고 있다면 스크립트에 ‘use strict’를 붙일 필요가 없다.
- 이 둘을 사용하면 엄격 모드가 자동으로 적용된다.