자바스크립트 use strict 사용 이유

자바스크립트 use strict 는, js 파일을 보다보면 주석을 제외한 가장 파일의 윗쪽에 ‘use strict’ 라는 코드 형태로 사용합니다.

use strict 는 엄격 모드라고도 하며, 파일 전체에 적용할 수도, 혹은 함수 단위로도 적용할 수 있습니다.

따라서, 오픈소스나 유지보수 하는 자바스크립트 코드에 use strict가 보이면 오해의 소지가 생길 수 있는 애매한 코드는 사용하지 않는 것이 좋습니다.

 

자바스크립트 use strict 의 개념

'use strict';

자바스크립트 use strict를 선언하면 다음과 같은 장점이 있습니다.

좀 더 안전한 코드를 작성하게 됩니다.

기존 자바스크립트의 애매한 문법들은 오류를 뱉기 때문에 좀 더 정확한 코드를 작성할 수 있습니다.

자바스크립트 엔진이 자동으로 최적화하여 수행하기 때문에 더 빨라지는 부분이 있습니다.

 

자바스크립트 use strict 예제

  <body>
    <script>
      "use strict";
      age = 100; // 사용하지 않은 변수 오류 발생
       console.log( age );
    </script>
  </body>

선언하지 않은 변수는 오류 발생

만약 아래와 같이 use strict 를 제외한다면,

  <body>
    <script>
      //"use strict";
      age = 100; // 정상적으로 할당이 됨
       console.log( age );
    </script>
  </body>

use strict를 제외하면 오류없이 결과가 나오는 것을 확인할 수 있습니다.

use strict를 제외하면 오류없이 결과가 나옴

아래와 같이 ‘use strict’ 정의한 상태에서는 변수를 삭제하는 코드 등은 사용할 수 없습니다.

<body>
    <script>
      function useStrictTest () {
        'use strict';
      // 항상 가장 위에 사용해야 한다.

 
      var name = "철수";
      delete name; // 오류 발생
      console.log(name);
      }
 
      useStrictTest();
    </script>
  </body>

use strict 정의한 상태에서는 변수를 삭제하는 코드 등은 사용할 수 없음

해당 코드를 실행하면 다음과 같이 Uncaught SyntaxError: Delete of an unqualified identifier in strict mode 에러가 발생합니다.

Uncaught SyntaxError Delete of an unqualified identifier in strict mode 에러발생

예시를 위해 function 스코프에서 use strict를 사용하였으나, 함수 밖에서는 strict 모드가 아닌데 특정 함수내에서만 strict 모드? 이러한 상황은 코드 작성에 모호함을 줄 수 있기 때문에 가급적 이런 식의 일부 function 에서만의 사용은 지양해야 합니다.

물론 최근에는 ESLint 등이 애매한 오류는 다 잡아주기 때문에 use strict의 역할은 다소 줄긴 했으나 만약 좀 더 타이트한 체크가 필요한 경우에는 스크립트 파일 최상위에서 use strict 사용은 요긴할 것으로 보입니다.

이상으로 자바스크립트 use strict 사용 이유에 대해서 알아보았습니다. 좀 더 쉬운 예제로 확인하고 할 때에는 w3school의 예제로 확인해 보시기 바랍니다.

참고로, sapui5에서는 각 js 파일의 define 내에 return 하는 함수 내에서 use strict 모드가 사용된 것을 이 문서를 통해 확인 할 수 있습니다.