스크립트나 함수 시작 부분에 위 지시어 추가.
- 스크립트 시작에 추가되면 전역범위에 영향 미침.
- 함수 안에 추가되면 함수 안 (= 로컬)에서만 미침.
- ECMAScript 5 버전에서 추가됨. 이전 JS 버전에서는 무시됨.
- 구문이 아니라 엄격모드로 실행되야 함을 알리는 지시어 (= 단순한 문자적 표현)일 뿐임.
- F12 키 개발자모드에서 에러 내용 확인 가능.
- 모든 프로그램에서 엄격모드 사용 가능하며, 깔끔한 코딩에 도움됨.
즉, 엄격모드는 이전에 허용 된 "잘못된 구문"을 실제 오류로 변경.- 엄격 모드에서는 아래 경우에 에러 발생함.
・쓰기 권한 없는 속성에 속성값 쓰기,
・존재하지 않는 속성 사용,
・존재하지 않는 변수 사용,
・존재하지 않는 객체 사용.
Use Strict 예제
<script>
"use strict"; // 엄격모드 전역범위 미침.
x = 3.14; // 에러 유발 (∵ 변수 선언 안 됨.)
</script>
<script>
"use strict"; // 엄격모드 전역범위 미침.
homzzang();
function homzzang() {
y = 3.14; // 에러 유발 (∵ 변수 선언 안 됨)
}
</script>
<script>
x = 3.14; // 에러 유발 안 함.
homzzang();
function homzzang () {
"use strict"; // 엄격모드 함수 안에서만 유효.
y = 3.14; // 에러 유발. (∵ 변수 선언 안됨)
}
</script>
<script>
"use strict";
x = 100; // 에러 유발
</script>
<script>
"use strict";
x = {a:10, b:20}; // 에러 유발
</script>
<script>
"use strict";
var x = 100;
delete x; // 에러 유발
</script>
<script>
"use strict";
function x(a, b) {};
delete x; // 에러 유발
</script>
<script>
"use strict";
function x(a, a) {}; // 에러 유발
</script>
<script>
"use strict";
var x = 010; // 에러 유발
</script>
<script>
"use strict";
var x = "\010"; // 에러 유발.
</script>
<script>
"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14; // 에러 유발
</script>
<script>
"use strict";
var obj = {get x() {return 0} };
obj.x = 3.14; // 에러 유발
</script>
<script>
"use strict";
delete Object.prototype; // 에러 유발
</script>
<script>
"use strict";
var eval = 100; // 에러 유발
</script>
<script>
"use strict";
var arguments = 100; // 에러 유발
</script>
<script>
"use strict";
with (Math){x = cos(2)}; // 에러 유발
</script>
<script>
"use strict";
eval ("var x = 2");
alert (x); // 에러 유발
</script>
※ 보안 상 이유로, 변수 호출 범위에서는 eval()의 변수 생성 금지.
<script>
"use strict";
function homzzang() {
alert(this); // undefined 경고창 뜸.
}
homzznag();
</script>
<script>
"use strict";
var public = 100; // 에러 유발
</script>