📌 Strict Mode
암묵적으로 sloppy mode를 해제하기 위한 방법이다. 오해의 소지가 있는 구문을 문법적으로 명확하게 평가하는 것이다.
호이스팅은
function foo() {
x = 10;
}
foo();
console.log(x);
선언하지 않는 변수 x에 10을 할당 할 경우,
자바스크립트 엔진은 x변수가 어디에서 선언되었는지 스코프 체인을 통해 검색했는데 어디에도 없다 ReferenceError가 발생할까?
NO , 자바스크립트 엔진은 암묵적 전역 객체에 x 프로퍼티를 동적 생성한다. 이때 전역 객체의 x프로퍼티는 마치 전역 변수처럼 사용할 수 있다. 이를 암묵적 전역 이라고 한다.
Strict mode추가
Strict mode는 자바스크립트 언어의 문법을 좀 더 엄격히 적용하여 오류를 발생시킬 가능성이 높거나 자바스크립트 엔진의 최적화 작업에 문제를 일으킬 수 있는 코드에 대해 명시적인 에러를 발생시킨다.
ESLint
ESLint 린트 도구를 이용해 소스코드를 실행하지 전에 소스코드를 스캔하여 문법적 오류만이 아니라 잠재적 오류까지 찾아내고 오류의 원인을 리포팅해주는 도구
전역의 선두 또는 함수 몸체의 선두에 아래의 코드 추가(최상단), file 최상단 혹은 특정함수의 상단
use strict;
스크립트 단위로 strict mode가 적용이 된다. => 스크립트 마다 적용해 주어야 함
- 선언되지 않는 전역 변수를 사용할 수 없다.
- 선언하지 않은 식별자는 접근할 수 없다.
암묵적 전역(var, implicit global)은 허용하지 않는다. - delete로 선언된 변수/함수/매개변수를 삭제할 수 없다.
- Block내에, var는 느슨한 모드와 동일한 스코프지만, 함수는 Block-Scope이다.
원래는 함수 스코프이나, Strict Mode는 Block-Scope이다.
블록스코프도 호이스팅이 되나, 그 범위의( 블록 범위)의 상단에 호이스팅된다. - 읽기 전용 프로퍼티에 대입할 수 없다.
- 한 함수에서 매개변수 이름이 중복되어서는 안된다.
- this 포인터가 가르키는 값이 null, undefined인 경우 전역 객체로 반환되지 않는다.
- 예약어를 사용할 수 없다.
- NaN, Infinite등의 전역 프로퍼티에 값을 할당하면 안된다.
이 둘은 읽기 전용 프로퍼티인데 왜 할당하냐라는 에러 뜬다. - ESM모듈은 strict mode로 실행된다.
- node에서는 this가 모듈객체를 참조하지 않는다.( 즉 전역의 thisValue = undefided ), this를 명시하지 않으면 undefined이다.
//스트릭트 모드가 아닐 경우
NaN = 9
React에서 StrictMode는 리액트 컴포넌트의 잠재적인 문제를 감지하고 경고를 표시하는 개발 도구이다.
리액트의 앱 성능이나 동작에 영향을 미치지 않는다. 오로지 개발 모드에서만 활성화
컴포넌트의 작동 방식을 점검하고 안전하지 않은 생명주기를 사용하는 컴포넌트를 발견한다.
'JavaScript' 카테고리의 다른 글
[JS] 메모이제이션 (0) | 2025.04.09 |
---|---|
[JS] 스코프 실행컨텍스트 (0) | 2025.04.08 |
[JS] 디스트럭처링(Destructuring) (0) | 2025.04.08 |
[JS] 호이스팅 (0) | 2025.04.07 |
[JS] 데이터 타입 (1) | 2025.04.03 |