use strict 사용 이유
출처 : http://hmmim.tistory.com/5
최근 쓰여진 javascript 코드들을 보면 전역 컨텍스트 맨 윗단에 "use strict" 라고 쓰여진 문구를 볼 수 있다.
이 문구는 ECMAScript5부터 적용되는 키워드인데 쉽게말해 안전한 코딩을 위한 가이드라인 이라 할 수 있겠다.
javascript를 좀 다뤄본 사람이라면 JSLint가 무엇인지 알 수 있을 것이다.
JSLint는 안좋은 자바스크립트 코딩패턴들을 코칭해주는 자바스크립트 문법 검사기다. (더글라스 크락포드 횽아가 만들었다고...)
무튼 여기에 자바스크립트 코드를 넣고 돌려보면
1 | Problem at line 1 character 1: Missing “use strict” statement. |
요로코롬 에러메시지를 뿜어내준다. "use strict"가 없다는 에러다. "use strict"는 필수적으로 사용해야하는 구문은 아니다.
strict 모드를 사용하게 되면
암시적으로 선언한 변수를 사용하거나 읽기 전용 속성에 값을 할당하거나 확장할 수 없는 개체에 속성을 추가할 수 없다.
(출처 : MSDN)
말이 좀 어려운데...
일단 strict 모드를 사용하기 위해서는 전역객체에 사용하는 방법과 함수내에 사용하여 함수에서만 strict 모드를 운용하는 방법이 있다.
strict 모드의 선언법
1.전역에서 strict 모드를 사용하고자 한다면 자바스크립트 코드의 맨 윗부분에 "use strict"를 쓴다.
1
2
3
4
5
6
7
8
9 | "use strict"; function a(){ var hello = 7; return hello; } //구문 오류. hello = 5; |
strict 모드를 전역에 설정하였기 때문에 hello라는 변수를 함수 밖의 변수로 선언할 수 없다.
2. 함수내에서만 strict 모드를 사용하고자 할 때는 함수 내의 최상위에 "use strict"를 쓴다.
1
2
3
4
5
6
7
8
9 | function a(){ "use strict" //구문 오류 hello = 7; return hello; } hello = 5; |
strict모드를 함수내에서만 사용하였기 때문에 함수내에서 선언의 경우 구문오류가 발생한다.
strict 모드의 제한
"use strict"; 를 사용하였을 때 제한이 되는 경우를 나열해 보자.
1. 선언하지 않고 변수를 사용할 때.
1
2 | "use strict"; x = 3.14; //선언하지 않고 사용하여 오류 |
2. 변수,함수,매개변수를 삭제하려할 때.
1
2
3 | "use strict"; x = 3.14; delete x; //삭제 안됨 |
3. 동일한 프로퍼티를 한번 이상 선언하려 할 때.
1
2 | "use strict"; var x = { p1 : 10, p1 : 20}; //오류 |
4. 매개변수 이름이 동일할 때.
1
2 | "use strict"; function x(p1, p1) {}; //오류 |
5. 8진법의 숫자 리터럴 과 특수문자를 할당하려 할 때.
1
2
3 | "use strict"; var x = 010; //오류 var x = /010; //오류 |
6. 읽기전용에 할당하려 할 때.
1
2
3
4
5 | "use strict"; var obj = {}; obj.defineProperty(obj, "x", {value:0, writable:false}); obj.x = 3.14; //오류 |
7. 얻기 전용 (get-only) 에 할당하려 할 때.
1
2
3 | "use strict"; var obj = {get x() {return 0} }; obj.x = 3.14; //오류 |
8. 삭제불가능한 프로퍼티를 삭제하려 할 때.
1
2 | "use strict"; delete Object.prototype; //오류 |
9. with 키워드를 사용하려 할 때.
1
2 | "use strict"; with (Math){ x = cos(2) }; //오류 |
10. eval() 을 사용하려 할 때.
1
2
3 | "use strict"; eval("var x = 2"); alert(x); //오류 |
with 와 eval() 은 대표적으로 사용하지말아야 할 키워드다. 어떤 책에서는 eval() 을 evil로 불러버리기도 한다.. 그렇게 기억하라고 ㅋㅋ
악마같은 존재를 배재하라는 뜻.
주의점!!
1. "use strict"는 함수나 스크립트의 최상위에서 사용되어야 한다.
2. IE 10 이전 버전에서는 사용할 수 없다.
참고사이트
1. http://msdn.microsoft.com/ko-kr/library/ie/br230269%28v=vs.94%29.aspx
2. http://www.w3schools.com/js/js_strict.asp
'Web > javascript / jQuery' 카테고리의 다른 글
자바스크립트 closure 이해하기 (4) | 2016.07.18 |
---|---|
Grunt 소개 및 사용법 (173) | 2016.06.20 |
숫자 자릿수 맞추기. (637) | 2016.05.31 |
공용 자바스크립트 - common_u (4) | 2016.05.25 |
내 기준 유용한 js / jquery 플러그인 (4) | 2016.05.23 |