• 회원가입
  • 로그인
  • 구글아이디로 로그인

[Basic] JS - Use Strict - 엄격모드 ★★★

JS 엄격모드 구문 정의

 

"use strict";

 


 

1.

스크립트나 함수 시작 부분에 위 지시어 추가.


2.
스크립트 시작에 추가되면 전역범위에 영향 미침.

함수 안에 추가되면 함수 안 (= 로컬)에서만 미침.

 

3.

"use strict"; 지시어는 ECMAScript 5 버전에서 추가됨. 이전 JS 버전에서는 무시됨.

즉, 숫자(예: 3 + 4;)나 문자열(예: homzzang;)구문 경우, 존재 않는 변수로 컴파일 되어 사라짐.
오직 "use strict"; 지시어를 이해하는 컴파일러에서만 의미 있음.

4.
구문이 아니라 엄격모드로 실행되야 함을 알리는 지시어 (= 단순한 문자적 표현)일 뿐임.

 

5.

엄격모드에선 선언 안 된 변수는 사용 불가.

 

6.

IE 10 이상 주요 최신 브라우저 모두 지원.

IE 9 및 그 이전 버전 브라우저는 지원 안 함.

 

7.

"use strict"는 단순 지시어라, IE9 이하 브라우저에서도 에러는 안 남. 

단지 이해를 못 해서, 엄격모드로 작동 안 할 뿐임.

 

8.

F12 키 개발자모드에서 에러 내용 확인 가능.

 

9.

모든 프로그램에서 엄격모드 사용 가능하며, 깔끔한 코딩에 도움됨.
즉, 엄격모드는 이전에 허용 된 "잘못된 구문"을 실제 오류로 변경.
(예) 

변수명 오류 시 일반모드에선 새 전역변수가 생성되나, 엄격모드에선 에러 발생.

쓰기 권한 없는 속성에 속성값을 설정할 경우 일반모드에선 오류 피드백 못 받으나, 엄격모드에선 피드백 받음.

 

10.
엄격 모드에서는 아래 경우에 에러 발생함.
・쓰기 권한 없는 속성에 속성값 쓰기,
・존재하지 않는 속성 사용,
・존재하지 않는 변수 사용,
・존재하지 않는 객체 사용.


 

 

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>

 

결과보기

 

 

Use Strict 사용 시 에러발생 경우

 

에러1 - 선언 안 된 변수 사용

 

<script>

"use strict";

x = 100;  // 에러 유발

</script>

 

 

에러2 - 선언 안 된 객체 사용

 

<script>

"use strict";

x = {a:10, b:20};  // 에러 유발

</script>

 

※ 객체도 변수 일종.

 

에러3 - 변수삭제 / 객체삭제

 

<script>

"use strict";

var x = 100;

delete x;  // 에러 유발 

</script> 

 

 

에러4 - 함수삭제

 

<script>

"use strict";

function x(a, b) {}; 

delete x;  // 에러 유발

</script>

 

 

에러5 - 매개변수명 중복

 

<script>

"use strict";

function x(a, a) {};  // 에러 유발

</script>

 

 

에러6 - 8진수 변수값 사용

 

<script>

"use strict";

var x = 010;   // 에러 유발

</script>

 

 

에러7 - 8진수 회피 문자

 

<script>

"use strict";

var x = "\010";   // 에러 유발.

</script>

 

 

에러8 - 읽기전용속성에 쓰기

 

<script>

"use strict";

var obj = {};

Object.defineProperty(obj, "x", {value:0, writable:false});

obj.x = 3.14;   // 에러 유발

</script> 

 

 

에러9 - get전용속성에 쓰기

 

<script>

"use strict";

var obj = {get x() {return 0} };

obj.x = 3.14;   // 에러 유발

</script>

 

 

에러10 - 삭제불가속성 삭제 시도.

 

<script>

"use strict";

delete Object.prototype;   // 에러 유발

</script> 

 

 

에러11 - 변수명으로 단어 eval 사용.

 

<script>

"use strict";

var eval = 100;   // 에러 유발

</script>

 

 

에러12 - 변수명으로 단어 arguments 사용.

 

<script>

"use strict";

var arguments = 100;   // 에러 유발

</script>

 

 

에러13 - with 구문 사용

 

<script>

"use strict";

with (Math){x = cos(2)};   // 에러 유발

</script> 

 

 

에러14 - 변수 호출 범위 안에서 eval()로 변수생성.

 

<script>

"use strict";

eval ("var x = 2");

alert (x); // 에러 유발

</script>

 

※ 보안 상 이유로, 변수 호출 범위에서는 eval()의 변수 생성 금지.

 

에러15 - 함수에서 객체 정의 안 된 this 키워드 사용.

 

<script>

"use strict";

function homzzang() {

  alert(this); // undefined 경고창 뜸.

}

homzznag();

</script>

 

 

에러16 - 미래 JS 버전 예약 키워드 이용한 변수 생성

 

<script>

"use strict";

var public = 100;   // 에러 유발 

</script>



 

※ 예약 키워드

 

implements

interface

let

package

private

protected

public

static

yield

 

 

"use strict" 지시어는 스크립트나 함수 시작 부분에서만 인식된다는 점 명심 !!

 

PS.

 

mdn strict mode 강의 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode (영어)

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Strict_mode (한국어)

 



분류 제목
DOM JS - CSS - 스타일변경
DOM JS - Animation - 애니메이션 (= 동적효과 = 움직임효과)
DOM JS - Events - 이벤트 2
DOM JS - addEventListener() 메서드 ★★★★★ - 이벤트 걸기 (= addEventListen…
DOM JS - Navigation - 노드탐색 (= 요소탐색) ※ 텍스트노드복사
DOM JS - Node - 노드추가, 노드삭제, 노드변경 (= 노드생성, 노드제거, 노드교체)
DOM JS - Collection - HTML요소집합 (= HTML요소묶음)
BOM JS - Window BOM - 윈도우 브라우저객체모델 (BOM: Browser Object Model)
BOM JS - Window Screen 객체 - 화면객체 (= 스크린객체 = screen객체)
BOM JS - Window Location 객체 - 위치객체 (= 로케이션객체 = Location객체) ※ loc…
BOM JS - Window History 객체 - 이력객체 (= 히스토리객체 = History객체 = 뒤로가기 +…
BOM JS - Window Navigator 객체 - 브라우저객체 (= 네이게이터객체 = Navigator객체 =…
BOM JS - Popup Boxes - 팝업상자 (= 팝업박스 = Alert Box + Confirm box + …
BOM JS - Timing Events ★ - 시간간격 코드실행 (= 타이밍 이벤트 = 시간이벤트 = 일정시간별 …
BOM JS - Cookie (쿠키) 사용법 ★★★ - 쿠키 (설정・생성) / 쿠키 (읽기・얻기・가져오기) / 쿠…
AJAX JS - AJAX (아작스) 소개
AJAX JS - AJAX - XMLHttpRequest() 메서드 ★ - 객체생성 (= 아작스/에이잭스 핵심 = X…
AJAX JS - AJAX - open()/send() 메서드 ★ - 서버에 요청 보내기 (GET방식 vs POST방…
AJAX JS - AJAX - Server Response (서버응답) - 콜백함수 사용 예제
AJAX JS - AJAX - XML 아작스 예제 (= xml 데이터 불러와 표만들기)
4/67
목록
찾아주셔서 감사합니다. Since 2012