#4 - 엄격모드 / use strict

만식이형·2023년 5월 26일
0

Javascript

목록 보기
4/10
post-thumbnail

1. 엄격 모드

  • ECMAScript 5 (ES5)는 JavaScript의 버전 중 하나로, 2009년에 표준으로 채택되었다.
  • 엄격 모드는 JavaScript의 실행을 엄격하게 제어하는 모드로, 코드 작성에 일부 규칙을 강제하여 에러를 더 잘 포착하고 예측 가능한 동작을 유도한다. 엄격모드를 사용하면 최적화된 코드를 짜기 용이하기에 대형 프로젝트일 경우 엄격모드가 매우 중요한 역할을 한다.

2. 엄격모드의 특징

이는 간략한 정리라서.. 추후 좀더 보강을 해봐야지..

  • 변수 선언 : 변수를 선언할 때 var 키워드를 사용해야 한다. 선언하지 않고 변수에 값을 할당하면 에러가 발생한다.
  • 변수 삭제: delete 연산자를 사용하여 변수를 삭제할 수 없다.
  • 읽기 전용 변수: evalarguments 읽기 전용 변수로 사용할 수 없다. 이전의 비엄격 모드에서는 이러한 변수에 새로운 값을 할당할 수 있었지만, 엄격모드에서는 할당 시 에러가 발생한다.
  • 함수 선언: 함수 선언이 스크립트 또는 함수의 맨 위로 끌어올려지지 않는다. 따라서 함수를 선언하기 전에 호출하면 에러가 발생한다.
  • 중복 매개변수 : 중복된 매개변수 이름을 사용할 수 없다. 이전의 비엄격 모드에서는 중복된 매개변수가 허용되었지만, 엄격모드에서는 에러가 발생한다.
  • Octal 숫자 : 8진수 숫자 리터럴 앞에 0을 붙이는 것이 허용되지 않는다. 예를 들어, 0123과 같은 숫자는 엄격모드에서 에러를 발생시킨다.
  • this 값 바인딩 : 함수의 this 값을 엄격하게 바인딩한다. 함수가 전역 컨텍스트에서 호출될 때 this undefined가 된다.

3. 사용법

  1. 최상단에 사용 : 보통은 최상단에 쓴다. 이로써 전역에 걸쳐 엄격 모드가 실행되기 때문에 이전의 느슨한 모드(Sloppy mode)에 비해 최적화된 코드를 짜기 용이하다.
"use strict";

// 엄격모드가 적용된 전역 범위의 JavaScript 코드
// 이곳에서는 엄격모드의 규칙이 적용된다.

function exampleFunction() {
  // 엄격모드가 적용되지 않은 함수 내부
  // 이곳에서는 엄격모드의 규칙이 적용되지 않는다.
  
  "use strict";
  
  // 엄격모드가 적용된 함수 내부
  // 이곳에서는 엄격모드의 규칙이 적용된다.
  // 함수 내부의 코드 작성
}
  1. 함수 내 사용 : 이 예시는 use strict가 쓰여진 곳부터 적용된다는 점을 보여주기 위한 것으로, 함수 내에 쓸 경우는 보통 함수 바디의 첫줄에 쓴다.
// 엄격모드가 적용되지 않은 전역 범위의 JavaScript 코드

function exampleFunction() {
  // 엄격모드가 적용되지 않은 함수 내부
  // 이곳에서는 엄격모드의 규칙이 적용되지 않습니다.
  
  "use strict";
  
  // 엄격모드가 적용된 함수 내부
  // 이곳에서는 엄격모드의 규칙이 적용됩니다.
  
  // 함수 내부의 코드 작성
}

4. 실제로 사용해보자!

아래와 같이 const, let, var 를 쓰지 않은 전역변수를 사용하면,

str = "Hello World"
function printStr () {
  console.log(str);
}
printStr();

콘솔에 출력되는 것을 확인할 수 있다.

그런데 최상단에 use strict를 쓰고 같은 코드를 쓰면?

'use strict'
str = "Hello World"
function printStr () {
  console.log(str);
}
printStr();

에러가 발생한다.

해결을 위해 전역 번수 앞에 let을 붙이자.

'use strict'
let str = "Hello World"
function printStr () {
  console.log(str);
}
printStr();

정상적으로 출력된다.

5. 엄격모드는 필수인가?

use strict 를 꼭 사용해야 하나요? "당연히 사용해야 하는 거 아니야?"라는 생각이 드시겠지만, 꼭 그렇지만은 않습니다.

모던 자바스크립트는 '클래스’와 '모듈’이라 불리는 진일보한 구조를 제공합니다(클래스와 모듈에 대해선 당연히 뒤에서 학습할 예정입니다). 이 둘을 사용하면 use strict가 자동으로 적용되죠. 따라서 이 둘을 사용하고 있다면 스크립트에 "use strict"를 붙일 필요가 없습니다.

코드를 클래스와 모듈을 사용해 구성한다면 "use strict"를 생략해도 됩니다.

* 출처: https://ko.javascript.info/strict-mode

profile
즐거운 게 즐거운 것

0개의 댓글