오늘은 strict mode에 대해 알아보자!
진짜 가끔가다 어떤 파일 상단에 적혀있는 것을 보았는데
그냥 아무 생각 없이 넘어간 것을 반성하며..
strict mode
strict mode는 간단하게 생각하면 그냥 설치하지 않고 사용하는
typescript라고 생각이 든다.
1
2
3
4
5
function foo(){
x=10;
}
foo()
console.log(x)
위의 코드를 보자.
자바스크립트라면 에러를 발생시키지 않을 것이다.
이런 상황에서 자바스크립트는 변수 x를 찾기 위해 스코프 체인을 통해 검색하기 시작한다.
그런데 함수 안에도 없고, 전역에도 선언된 것이 없다.
그래서 자바스크립트는 암묵적으로 x라는 변수를 전역 객체에 생성하고 사용한다.
이런 것을 암묵적 전역이라고 한다.
우리는 일반적으로 이러한 오류들을 줄이기 위해 typescript를 사용한다.
하지만 그래도 이런 것도 있구나~ 하고 알아두자.
strict mode 적용
사용 방법은 전역, 혹은 함수 상단에
1
'use strict';
이렇게 선언하는 것이다.
그러면 strict mode가 적용이 된다.
use srtict를 선언한 위치에서부터 적용이 되기 때문에
함수에서 작성할 때
use strict보다 위에 있는 코드들은 영향을 받지 않는다.
하지만 보통 전역에 strcit mode를 쓰는 것은 위험할 수 있다.
우리는 외부 라이브러리를 사용할 때도 있는데
해당 라이브러리가 strict mode를 지원하지 않을 수 있기 때문이다.
strict mode가 발생시키는 에러
안타깝게도 strict mode가 많은 것을 체크해주지는 않는다.
암묵적 전역
제일 처음 봤던 예시처럼 선언하지 않는 변수를 참조할 때 ReferenceError가 뜬다.
번수, 함수 매개변수의 삭제
delete 연산자로 변수, 함수, 매개변수를 삭제하면 SyntaxError가 뜬다.
매개변수 이름의 중복
인자의 이름이 동일하면 SyntaxError가 뜬다.
딱히 쓸 일은 없을 듯..
그래도 알아만 두자.
미래의 누군가가 물어볼 수도 있으니.