ES6에서 "엄격한 사용"을 사용하지 않는 것이 좋습니까?


200

아직 ECMAScript 6에 익숙하지 않습니다. 방금 응용 프로그램 코드에 ES6을 사용하는 React Starter Kit 저장소를 복제했습니다. 린터가 지시어의 발생을 금지 하도록 구성 되어 있다는 사실에 놀랐습니다 use strict.ES6 이전의 JavaScript에서 권장되었다고 생각했습니다. 그래서 요점이 뭐야?



답변:


257

ES6 모듈은 항상 엄격 모드입니다. 스펙 의 관련 부분을 인용하려면 다음을 수행 하십시오 .

10.2.1 엄격한 모드 코드

ECMAScript 스크립트 구문 단위는 제한되지 않거나 엄격 모드 구문 및 의미를 사용하여 처리 될 수 있습니다. 다음과 같은 상황에서 코드는 엄격 모드 코드로 해석됩니다.

  • 전역 코드는 엄격한 사용 지침 (14.1.1 참조)이 포함 된 Directive Prologue로 시작하는 경우 엄격한 모드 코드입니다.
  • 모듈 코드는 항상 엄격 모드 코드입니다.
  • ClassDeclaration 또는 ClassExpression의 모든 부분은 엄격 모드 코드입니다.
  • Eval 코드는 Use Strict Directive가 포함 된 Directive Prologue로 시작하거나 Eval에 대한 호출이 Strict Mode 코드에 포함 된 직접 Eval (12.3.4.1 참조) 인 경우 엄격한 모드 코드입니다.
  • 연관된 FunctionDeclaration, FunctionExpression, GeneratorDeclaration, GeneratorExpression, MethodDefinition 또는 ArrowFunction이 엄격한 모드 코드에 포함되어 있거나 함수의 [[ECMAScriptCode]] 내부 슬롯의 값을 생성하는 코드가 Directive Prologue로 시작하는 경우 함수 코드는 엄격한 모드 코드입니다. 엄격한 사용 지침이 포함되어 있습니다.
  • 마지막 인수가 처리 될 때 엄격한 지시문이 포함 된 지시문 프롤로그로 시작하는 FunctionBody 인 문자열 인 경우 내장 함수 및 생성자 생성자에 인수로 제공되는 함수 코드는 엄격한 모드 코드입니다.

11
글로벌 코드와 모듈 코드의 차이점은 무엇입니까? 모듈 코드는 내가 필요하면 module.js의 모든 것을 의미하기 때문에 오해라고 생각합니다 ( 'module').
May Oakes

8
@BrynnMahsman ES2015에는 기본 모듈이 있습니다. CommonJS는 라이브러리 일 뿐이며 언어와 관련이 없습니다.
Kit Sunde

18
답변 주셔서 감사합니다. 가져 오기 / 내보내기 키워드를 사용하지 않는 경우 ES6 모듈이 아닙니까? 현재 노드 4를 사용하고 있으며 키워드 가져 오기 / 내보내기에 액세스 할 수 없으며 CommonJS module.exports 및 require () 및 ES6 기능이 기본적으로 활성화되어 있습니다. 모든 파일의 맨 위에 엄격하게 사용해야하는 이유를 설명합니다. 기술적으로 V8에서 일부 ES6 기능을 사용하여 CommonJS 모듈을 작성하고 있습니까?
May Oakes

7
"모듈입니까?"에 대한 자세한 검사 참조 nczonline.net/blog/2016/04/... 가져 오기 또는 내보내기의 존재 모듈을 나타낼 수 있습니다 동안 가져 오기 또는 내보내기의 부족이 분명 파일이 모듈 아니라는 것을 의미하지 않는다 .... "그래서이 파싱하는 동안 파일이 모듈임을 자동 감지하는 효과적인 방법은 없습니다. "
ptim

1
"모듈"이란 정확히 무엇입니까? 으로 만 구성된 스크립트 에서 strict오류 ( AirBnB 사전 설정 사용 )가 나타납니다 "use strict"; console.log('foo'). 모듈입니까?
Dan Dascalescu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.