[ use strict(엄격모드) ]
ES5부터 지원하는 use strict는
암묵적인 "느슨한 모드(Sloppy Mode)"를 해제하고 명시적인 "엄격 모드(Strict Mode)"를 사용하는 방법
JS의 제한된 버전을 선택함으로써 런타임시 JS 코드에 대하여 향후 버전의 ECMAScript에서 사용될 수 있는 일부 구문을 제외하는 등보다 엄격한 parsing 및 error handling을 자발적으로 시행하도록 적용함으로써 일반적인 코딩 실수나 안전하지 않은 동작을 포착함
strict 모드에서는 일반적인 JS의 의미에 몇가지를 변경함
- JS오류는 아니지만 함정이 될 어떤 일을 오류가 발생하도록 변경하여 제거
- 코드의 문제를 더 빨리 알리고 소스로 더 빨리 안내하므로 결과적으로 디버깅이 쉬워짐
- JS 엔진의 최적화 처리를 어렵게 만드는 오류를 수정함
- 미래의 ECMAScript로 정의 될 예정 구문을 금지하여 발생 가능한 에러를 예방함
strict mode가 적용되는 사항(JS의 기본 동작이 변경되는 사항)
- 암묵적인 전역 변수 금지
- 변수를 선언하지 않고 사용하는 것을 금지하여 전역 오염을 방지 할 수 있음
- 변수, 함수, 매개변수에 중복된 이름 금지
- 중복된 이름을 가진 변수, 함수, 매개변수의 선언을 금지함
- 수정할 수 없는 객체에 대한 수정 금지
- 확장 및 삭제가 금지된 객체에 대한 수정을 시도하면 오류 발생
- this의 값 설정
- 함수 내에서 this의 값이 전역 객체를 참조하지 않고 undefined가 됨
- with문 금지
- with문을 사용하는 것을 금지함
strict mode(엄격모드) 적용하기
use strict는 전체 스크립트 또는 부분함수에 적용 가능함
단 { } 괄호로 묶어진 블록문에서는 적용되지 않음 즉 컨텍스트와 같은 곳에 적용을 시도하면 동작하지 않음
전체 스크립트에 strict mode 적용
// 전체 스크립트 엄격 모드 구문
"use strict";
var v = "Hi! I'm a strict mode script!";
함수에 strict mode 적용
function strict() {
// 함수-레벨 strict mode 문법
"use strict";
function nested() {
return "And so am I!";
}
return "Hi! I'm a strict mode function! " + nested();
}
function notStrict() {
return "I'm not strict.";
}
함수에 strict mode를 적용하기 위해 함수 본문 처음에 "use strict";('use strict';) 구문을 넣음
모듈에 strict mode 적용
function strict() {
// 모듈이기때문에 기본적으로 엄격합니다
}
export default strict;
JS 모듈의 전체 컨텐츠는 엄격 모드 시작을 위한 구문 없이도 자동으로 엄격모드 상태임
strict mode의 장점
- 오류 감지
- strict mode는 일부 애매한 코드의 동작을 변경하여 오류를 발생시킴
- 이로 인해 오류를 더 빨리 감지하고 조치를 취할 수 있음
- 전역 변수 오염 방지
- strict mode에서 전역 변수를 선언하고 사용하는 것을 금지함
- 이로 인해 다른 코드에 의해 전역 변수가 무분별하게 변경되는 것을 방지할 수 있음
- 성능 최적화
- strict mode에는 몇 가지 코드 최적화 기능이 내장되어 있음
- 이로 인해 코드 실행 속도가 향상될 수 있음
strict mode의 단점
- 일부 기능 제한
- strict mode에서는 with 문을 사용할 수 없는 등 일부 기능을 사용할 수 없음
- 이는 기존의 코드와의 호환성 문제를 일으킬 수 있음
- 예전 브라우저 호환성
- strict mode는 ECMAScript 5에서 소개된 기능이므로 예전 버전의 브라우저에서는 동작하지 않을 수 있음
- 이는 호환성 문제를 처리해야 할 때 추가 작업을 필요로 함
[ undeclared ]
undeclared는 스코프 내에 변수가 선언조차 되지 않았을 때를 말함
즉 접근 가능한 스코프에 변수 선언조차 되어 있지 않은 상태를 뜻함
undefined vs null vs undeclared
undefined는 개발자가 의도적으로 할당한 값이 아니라 자바스크립트 엔진에 의해 초기화된 값
값이 없는 게 아니라 값이 할당된 적이 없다는 뜻
null은 의도적으로 변수에 값이 없다는 것을 명시할 때 사용
undeclared는 접근 가능한 스코프에 변수 선언조차 되어 있지 않은 상태
null 비교
null을 비교할때는 엄격한 비교 연산자(===)를 사용하는 것이 좋음
typeof를 사용하거나 느슨한 비교를 할경우 원하는 비교 혹은 확인 불가능
typeof null //'object'
null == undefined //true
null === undefined //false
'CS > 프로그래밍' 카테고리의 다른 글
원시 값과 참조 값 (0) | 2023.11.03 |
---|---|
웹팩과 바벨 (0) | 2023.11.02 |
탐색 알고리즘 (1) | 2023.10.13 |
정렬 알고리즘 (0) | 2023.10.13 |
링크드리스트(연결 리스트)와 배열 (2) | 2023.10.11 |