모던 자바스크립트 Deep Dive 20장-strict mode

HustleKang·2022년 4월 8일

strict mode란?

function f(){
	x = 1;
}
f();
console.log(x); // 1

암묵적 전역
x에 1을 할당하기 위해 x를 찾는데 x가 선언이 되어 있지 않다
전역 스코프까지 올라와서도 x가 없다
암묵적으로 전역 객체에 x를 프로퍼티로 추가

strict mode는 문법을 보다 엄격히 적용하여 명시적 에러를 발생시킴

strict mode의 적용

'use strict'; 를 코드의 선두에 추가하면 적용
전역의 선두에 추가 : 스크립트 전체
함수 선언 내부의 선두 : 함수와 그 안의 중첩함수

전역에 strict mode를 적용하는 것은 피하자

<!DOCTYPE html>
<html>
<body>
  <script>
  	'use strict';
  </script>
  <script>
	x = 1; //에러 ㄴ
  </script>
    <script>
  	'use strict';
    y = 2; //에러
  </script>
</body>
</html>

전역에 적용한 strict mode는 해당 스크립트에만 적용됨
non-strict mode인 외부 라이브러리를 불러오는데 전역이 strict-mode면 오류
이럴 경우 즉시 실행 함수로 스크립트를 감싸고 즉시 실행 함수의 선두에 strict moded 적용

(function(){
	'use strict';
    ...
}());

함수 단위로 strict mode를 적용하는 것도 피하자

즉시 실행 함수로 감싼 스크립트 단위로만 적용해라

strict mode가 발생시키는 에러

암묵적 전역

선언하지 않은 변수 참조시 ReferenceError

변수, 함수, 매개변수의 삭제

delete 연산자 사용 시 SyntaxError

매개변수 이름의 중복

중복된 매개변수 이름 사용시 SyntaxError

function plus(x,x){
        return x+x;
    }

plus(1,2); //4

(function f(){
    'use strict';
    function plus(x,x){
        return x+x;
    }
}()); // SyntaxError

strict mode 적용에 의한 변화

일반 함수의 this

일반함수에서 this는 전역객체를 가르키지만
strict mode에서는 undefined이다, 에러는 X

arguments 객체

매개변수에 전달된 인수를 재할당해서 변경하면 변경은 되지만 arguments객체는 그대로 변경 X

(function(x){
    'use strict';
    x = 10;
    console.log('x는',x); // x는 10
    console.log(arguments); // arguments 는 1000
}(1000));

(function(x){
    x = 10;
    console.log('x는',x); x는 10
    console.log(arguments); arguments도 10
}(1000));

이웅모, 『모던 자바스크립트 Deep Dive』, 위키북스(2021)

profile
grindin'

0개의 댓글