strict mode
- ES5부터 도입된 기능으로, JS 언어의 문법을 좀 더 엄격히 적용하여 오류를 발생시킬 가능성이 높거나 JS 엔진의 최적화 작업에 문제를 일으킬 수 있는 코드에 대해 에러를 발생시킨다.
- 암묵적 전역: 선언하지 않은 변수를 참조할시, ReferenceError 발생
- 변수, 함수, 매개변수의 삭제: delete 연산자로 변수, 함수, 매개변수 삭제시 SyntaxError 발생
- 매개변수 이름 중복: 중복된 매개변수 이름 사용시 SyntaxError 발생
- with 문의 사용: 전달된 객체를 스코프체인에 추가하지만, 성능과 가독성이 나쁘므로 사용하지 않는것을 권장
strict mode
를 적용하기 위해서, 전역의 선두 혹은 함수 몸체의 선두에use strict;
text를 추가한다.
// test.js
// strict mode 적용
"use strict"
- 전역 및 함수단위로
strict mode
를 적용하는 것을 피하는 것을 권장한다.- 전역: 해당 스크립트에 한정되어 사용되긴 하지만,
strict
,non-strict
혼용은 오류를 발생 가능성 존재, 함수 또한strict
,none-strict
의 혼용은 바람직하지 않음 => 즉시 실행 함수로 스크립트 전체를 감싸 스코프 구분 후 즉시실행 함수 선두에strict mode
적용
- 전역: 해당 스크립트에 한정되어 사용되긴 하지만,
빌트인 객체
- JS는 Object, String, Number, Boolean, Symbol, Date, Math, RegExp, Array등 약 40여 개의 표준 빌트인 객체를 제공
- Math, Reflect, JSON을 제외한 표준 빌트인 객체는 모두 인스턴스를 생성할 수 있는 생성자 함수 객체
- 생성자 함수 객체이면서 표준 빌트인 객체는 프로토타입 메서드와 정적 메서드 제공, 생성자 함수 객체가 아닌 표진 빌트인 객체는 정적 메서드만 제공
- 프로토타입 메서드: 인스턴스를 통해서만 호출이 가능한 메서드
정적 메서드: 인스턴스에서 호출이 불가능(인스턴스 참조X), 클래스를 통해서만 호출이 가능
래퍼 객체
- string, number, boolean 등의 원시형 데이터에 객체처럼 접근할시 생성되는 임시 객체
- 원시값을 객체처럼 사용할 시 JS 엔진은 암묵적으로 연관된 객체 생성하며, 생성된 객체로 프로퍼티에 접근하거나 메서드를 호출하고 다시 원시값으로 복구
암묵적 전역
var x = 10; // 전역 변수
function foo() {
// 선언하지 않은 식별자에 값을 할당 => 전역 변수처럼 동작
y = 10;
}
foo();
console.log(x + y) // 20
console.log(global.y) // 10
- 위 예시처럼, 변수명의 선언 없이
y = 10
처럼 값을 할당하였을때,y
는 마치 선언된 전역 변수처럼 동작을 하게 되는데 이러한 현상을 암묵적 전역이라고 한다. (y
는 전역 객체의 프로퍼티로 동적 생성) - 편수 선언 없이, 단순 전역 객체의 프로퍼티로 추가되었기 때문에 호이스팅이 발생하지 않는다.
delete
키워드로 삭제가 가능하다.
'JavaScript' 카테고리의 다른 글
[DeepDive] - 25장(클래스) 필요 내용 정리 (0) | 2022.06.24 |
---|---|
[DeepDive] - 23장(실행 컨텍스트) 필요 내용 정리 (0) | 2022.06.17 |
[DeepDive] - 17장(생성자 함수에 의한 객체 생성) 필요 내용 정리 (0) | 2022.06.09 |
[DeepDive] - 15장(let, const 키워드와 블록 레벨 스코프), 16장(프로퍼티 어튜리뷰트) 필요 내용 정리 (0) | 2022.06.08 |
[DeepDive] 13장(스코프), 14장(전역 변수의 문제점) 필요 내용 정리 (0) | 2022.06.07 |