2022. 11. 13. 16:01ㆍjs
*20장 strict mode *
20.1 strict mode 란
function foo() {
x = 10;
}
코드 1 에서 x 는 선언되지 않은 변수에 값을 할당 했다. 이 때 자바스크립트 엔진에서는
어떤 변수가 선언되어있는지 스코프체인을 통해 확인 하는 작업을 거치는데 자바스크립트 엔진의 경우
이러한 상황에서 x 라는 프로퍼티를 암묵적으로 선언해주는 작업을 한다. 이것을 암묵적 전역 이라고
부르는데 이는 개발자의 의도와 상관없이 발생함으로 오류의 원인이 될 가능성이 크다.
그렇기에 ES5 이후부터 strict mode 가 추가되었다. 이는 위와 같은 암묵적 전역을 오류로 발생시켜
조금더 이러한 잘못된 접근을 해결하기에 도움을 주는 모드라고 할 수 있다. 이를통해
개발부터 미연에 방지 할 수 있도록 도와줄 수 있도록 하고 있다 .
*20.2 strict mode 의 적용 *
use strict; 을 추가하여 사용한다. 이를 전역의 선두, 소스의 맨위단에
추가하게되면 스크립트 전체가 strict mode 로 동작하는것이 된다.
case 1
'use strict';
function () {
}
case 2
function () {
'use strict';
}
case 3
function () {
x = 10;
'use strict'; // <- 잘못된 예시.
}
20.3 전역에 strict mode적용을 피하자.
외부 라이브러리를 사용하거나 아니면, non-strict 모드와 strict 모드를 혼용해서 사용하는것은
문제를 발생 시킬수 있다. 그래서, 전역에다 선언해서 사용하는것은 피하는게 좋고
사용하기를 원한다면
(function () {
'use strict';
test();
test2();
}());
와 같이 사용하는 것을 권장한다.
*20.4 함수 단위로 strict mode 를 적용하는 것을 피하자 *
결론.
(function () {
'use strict';
구조에서만 사용하는 것을 권장.
}());
20.5 strict mode가 발생 시키는 에러
암묵적 전역
변수, 함수, 매개변수의 삭제,
매개변수 이름의 중복,
with 문의 사용
*20.6 strict mode 적용에 의한 변화 *
20.6.1 일반 함수의 this
strict mode 에서 함수를 일반함수로서 호출 하면 this 에 undefined 가 바인딩 된다.
생성자 함수가 아니라면 굳이 this를 사용할 필요가 없기 때문.
20.6.2 arguments 객체
strict mode 에서는 매개변수 인수를 재할당 해도 결과값이 변경되지 않는다
'js' 카테고리의 다른 글
23장 실행 컨텍스트 (0) | 2022.11.15 |
---|---|
22장. (0) | 2022.11.15 |
프로토타입 part2 (0) | 2022.11.09 |
19 장 프로토타입 / part1 (0) | 2022.11.08 |
함수와 일급 객체 (0) | 2022.11.06 |