20 Strict mode

2022. 11. 13. 16:01js

*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