Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 슬라이딩윈도우
- styled-components
- never타입
- js알고리즘
- 그리디
- typscript
- 버블정렬
- 블로그만들기
- nextjs
- JavaScript
- 해쉬
- cookie
- next.js
- react-query
- 스택
- 라이프사이클
- 빅오
- Algorithm
- 큐
- textarea autosize
- NextAuth
- aws lightsail
- react
- tailwindcss
- isNaN
- nestjs
- TypeScript
- 알고리즘
- 투포인터
- 정렬
Archives
- Today
- Total
far
[Javascript] 엄격 모드(Strict mode) 본문
1. 엄격 모드
function foo() {
x = 10;
}
foo();
console.log(x); // ?
위 식의 경우 x 변수를 찾을 수 없음에도 ReferenceError가 발생하지 않는다. 자바스크립트 엔진이 암묵적으로 전역 객체에 x 프로퍼티를 동적 생성하고 이를 전역 변수처럼 사용할 수 있게 해주기 때문이다. 이 현상을 암묵적 전역(implicit global)이라고 한다. 하지만 이런 현상은 나중에 예기치 못한 오류를 발생시키는 원인이 될 가능성이 있다. 그래서 ES5부터 문법적으로 오류를 발생시킬 가능성이 높거나 JS엔진의 최적화 작업에 문제를 일으킬 수 있는 코드에 대해 명시적인 에러를 발생시키는 엄격 모드(Strict mode)가 추가되었다.
'use strict';
function foo() {
x = 10; // ReferenceError: x is not defined
}
foo();
전역 또는 함수 몸체의 최상단에 'use strict'를 추가하면 사용이 가능하다.
(function () {
'use strict';
// ...
}());
다른 스코프에 영향을 주고 싶지 않다면 위의 예시처럼 즉시 실행 함수의 최상단에 use strict를 적용해준다.
2. 엄격 모드 적용에 의한 변화
2.1. 일반 함수의 this
엄격 모드 적용시 일반 함수에서 this를 사용하면 undefined가 바인딩된다. 생성자 함수가 아닌 일반 함수 내부에서는 this를 사용할 필요가 없기 때문이다.
(function () {
'use strict';
function foo() {
console.log(this); // undefined
}
foo();
}());
2.2. arguments 객체
엄격 모드에서는 개개변수에 전달된 인수를 재할당하여 변경해도 arguments 객체에 반영되지 않는다.
(function (a) {
'use strict';
a = 2;
// 변경된 인수가 arguments 객체에 반영되지 않는다.
console.log(arguments); // { 0: 1, length: 1 ]
}(1));
참고: 모던 자바스크립트 Deep Dive
'Javascript' 카테고리의 다른 글
[Javascript] 실행 컨텍스트 (0) | 2023.03.26 |
---|---|
[Javascript] This에 대하여 (0) | 2023.03.25 |
[Javascript] 프로토타입(Prototype) (0) | 2023.03.23 |
[Javascript] 프로퍼티 어트리뷰트 (0) | 2023.03.22 |
[Javascript] var와 let, const의 차이 (0) | 2023.03.21 |
Comments