728x90
strict mode
- 자바스크립트 엔진은 사용할 변수의 선언이 존재하지 않는 경우 ReferenceError를 발생시키지 않고 암묵적으로 전역 객체에 x 프로퍼티를 동적으로 생성하여 사용함
- 이를 암묵적 전역이라고 함 => 개발자의 의도와 상관없이 발생해 오류를 발생시키는 원인이 됨
- 따라서 반드시 var, let, const 키워드를 사용해 변수를 선언한 후 사용해야함
- ES5부터 strict mode가 추가됨
- 자바스크립트 언어의 문법을 좀 더 엄격히 적용하여 오류를 발생시킬 가능성이 높거나 자바스크립트 엔진의 최적화 작업에 문제를 일으킬 수 있는 코드에 대해 명시적인 에러를 발생시킴
- ESLint를 사용해도 됨. 정적 분석 기능을 통해 소스코드를 실행하기 전 문법적 오류나 잠재적 오류를 찾아내고 오류의 원인을 리포팅해주는 유용한 도구임
strict mode의 적용
- 함수 몸체의 선두에 'use strict'; 추가하면 스크립트 전체에 strict mode가 적용됨
- 전역으로 적용하지 말 것 => 스크립트 단위로 적용되기 때문에 혼용될 수 있음. 외부 라이브러리가 논스트릭 모드일 수 있음
- 함수 단위로 적용하지 말 것 => 스트릭 모드가 적용된 함수를 참조할 때 해당 컨택스트가 적용되지 않으면 문제 발생 가능
- 즉시 실행 함수로 감싼 스크립트 단위로 적용하는 것이 바람직함!
strict mode가 발생시키는 에러
- 암묵적 전역 : 선언하지 않은 변수 참조하면 ReferenceError 발생
- 변수, 함수, 매개변수의 삭제 : delete 연산자로 변수, 함수, 매개변수를 삭제하면 SyntaxError 발생
- 매개변수 이름의 중복 : 중복된 매개변수 이름 사용하면 SyntaxError 발생
- with문의 사용 : with문을 사용하면 SyntaxError 발생. with 문은 전달된 객체를 스코프 체인에 추가함. 동일한 객체의 프로퍼티를 반복해서 사용할 때 객체이름을 생략할 수 있어 코드가 간단해지지만 성능과 가독성이 나빠 사용하지 않는 것이 좋음
strict mode 적용에 의한 변화
- 함수를 일반 함수로서 호출하면 this에 undefined 바인딩됨. 생성자 함수가 아닌 일반 함수 내부에서는 this를 사용할 필요가 없기 때문
- 매개변수에 전달된 인수를 재할당하여 변경해도 arguments 객체에 반영되지 않음
728x90
'FE > 리뷰' 카테고리의 다른 글
[모던 자바스크립트 딥다이브] 22장 this (0) | 2024.04.20 |
---|---|
[모던 자바스크립트 딥다이브] 21장 빌트인 객체 (0) | 2024.04.13 |
[모던 자바스크립트 딥다이브] 19장 프로토타입 (0) | 2024.04.11 |
[모던 자바스크립트 딥다이브] 18장 함수와 일급 객체 (0) | 2024.04.06 |
[모던 자바스크립트 딥다이브] 17장 생성자 함수에 의한 객체 생성 (1) | 2024.04.06 |