화니's 블로그
어떤 스크립트를 사용하고 있는지 알아야 한다 본문
스트릭트 모드 사용 방법
js 파일 최 상단에 추가 파일내에 모든 내용에 활성화
1 | "use strict"; | cs |
함수 본문 처음에 추가하여 함수 내에서만 활성화 되도록 가능
1 2 3 4 | function f(x){ "use strict"; // .... } | cs |
스트릭트 모드로 작성한 코드를 ES5 환경에서 테스트 하지 않는다면 아래과 같이 제대로 실행되지 않는 코드를 작성할 가능성이 높음
1 2 3 4 5 | function f(x){ "use strict"; var arguments = []; // 오류 : arguments를 재정의함 // .... } | cs |
스트릭트 모드에서는 arguments 변수의 재정의를 허용하지 않는다.
스트릭트 모드 확인을 구현하지 않는 환경에서는 이코드를 허용
스트릭트 모드를 사용할 때 조심해야 할 함정 중 하나는, "use strict" 명령어가 스크립트나 함수의 상단에 선언되었을 때만 인식이 되고,
이 때문에 스크립트 병합에 민감해짐
여러개의 js 파일을 작성 할때 한개의 파일만 스트릭트 모드가 구현되도록 하였을 경우
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | // file1.js "use strict"; function f(){ // .... } // ...... // file2.js // 스트릭트 모드 명령어 없음 function f2(){ var arguments = []; // .... } // ..... | cs |
이 두개 파일을 병합 하였을 때
file1.js를 앞에 두고 병합할 경우 전체 파일의 모든 내용이 스트릭트 모드로 동작
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | // file1.js "use strict"; function f(){ // .... } // ...... // file2.js // 스트릭트 모드 명령어 없음 function f2(){ var arguments = []; // 오류 : arguments 재정의 // .... } // ..... | cs |
file2.js를 앞에 두고 병합할 경우 전체 파일의 모든 내용이 스트릭트 모드로 동작 하지 않음
1 2 3 4 5 6 7 8 9 10 11 12 13 | // file2.js // 스트릭트 모드 명령어 없음 function f2(){ // .... } // ..... // file1.js "use strict"; function f(){ // 더 이상 스트릭트 모드로 인식되지 // .... } // ...... | cs |
위와 같은 문제가 발생하지 않기 위한 주의 사항
1. 스트릭트 모드로 작성된 파일과 일반 모드로 작성된 파일을 절대 병합하지 마라.
2. 즉시 실행되는 함수 표현식을 사용해 파일들의 본문을 감싸라.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // 스트릭트 모드 명령어 없음 (function(){ // file1.js "use strict"; function f(){ // .... } // .... })(); (function(){ // file2.js // 스트릭트 모드 명령어 없음 function f2(){ var arguments = []; // 오류 발생 하지 // .... } // ..... })(); | cs |
- 각 파일의 내용이 별도 스코프에 위치하기 때문에 스트릭트 모드 명령어는 해당 파일에만 영향을 줌
3. 어떤 모드에 있건 동일하게 동작하도록 코드를 작성하라.
- 클라이언트의 코드가 스트릭트모드 또는 일반 모드일 거라고 단정해서는 안된다.
- 최대한 호환성을 가지도록 코드를 구성하는 가낭 간단한 방법은 스트릭트 모드로 작성하되, 스트릭트 모드가 지역적으로 활성화 될 수
있게 명시적으로 전체 코드 내용을 함수로 감싸는 것
1 2 3 4 5 6 7 | (function() { "use strict"; function f(){ // ... } // .... })(); | cs |
기억할 점
ㆍ애플리케이션이 지원할 자바스크립트의 버전을 정하라
ㆍ애플리케이션이 동작하게 될 모든 환경에서 여러분이 사용한 모든 자바스크립트의 기능이 지원되어야 한다.
ㆍ항상 스트릭트 모드 확인을 수행하는 최신 브라우저 환경에서 스트릭트 코드를 테스트 하라
ㆍ스트릭트 모드 지원에 대한 기대가 서로 다른 스크립트들을 병합할 때는 주의해야 한다.