Не рекомендується використовувати "строго використовувати" в ES6?


200

Я ще не знайомий з ECMAScript 6. Я щойно клонував репо React Starter Kit, який використовує ES6 для коду програми. Я був здивований, побачивши, що лінійка налаштована таким чином, щоб забороняти виникнення use strictдирективи, що, на мою думку, було рекомендовано в JavaScript перед ES6. Тож який сенс?



Відповіді:


257

Модулі ES6 завжди в суворому режимі. Щоб процитувати відповідну частину специфікації :

10.2.1 Код суворого режиму

Синтаксична одиниця сценарію ECMAScript може бути оброблена з використанням синтаксису та семантики без обмежень або суворого режиму. Код трактується як режим суворого режиму в наступних ситуаціях:

  • Глобальний код - це режим суворого режиму, якщо він починається з Прологу Директиви, який містить Директиву суворої експлуатації (див. 14.1.1).
  • Код модуля - це завжди строгий код режиму.
  • Усі частини ClassDeclaration або ClassExpression є суворим режимом коду.
  • Код Eval - це код суворого режиму, якщо він починається з Прологу Директиви, який містить Директиву суворої експлуатації, або якщо заклик до eval є прямим eval (див. 12.3.4.1), який міститься у строгому режимі коду.
  • Код функції - це суворий режим режиму, якщо пов'язаний FunctionDeclaration, FunctionExpression, GeneratorDeclaration, GeneratorExpression, MethodDefinition або ArrowFunction міститься в коді суворого режиму або якщо код, який виробляє значення внутрішнього слота функції [[ECMAScriptCode]], починається з директора Пролог що містить сувору директиву щодо використання.
  • Код функції, який подається в якості аргументів вбудованим конструкторам функцій та генераторів, є строгим кодом режиму, якщо останній аргумент - це рядок, що при обробці - це функціяBody, що починається з прологу директиви, що містить директиву використання строгих строків.

11
Яка різниця між глобальним кодом та кодом модуля? Я думаю, що я нерозумію, оскільки код модуля для мене означає все в module.js, якщо мені потрібно ('module').
May Oakes

8
@BrynnMahsman ES2015 має вбудовані модулі. CommonJS - це просто бібліотека і не має нічого спільного з мовою.
Kit Sunde

18
Дякую за Вашу відповідь. Так це не модуль ES6, якщо він не використовує ключові слова імпорту / експорту? Зараз я використовую Node 4 і не маю доступу до імпорту / експорту ключових слів, і я просто використовую CommonJS module.exports і вимагаю () разом із функціями ES6, включеними за замовчуванням. Це пояснило б, чому я повинен ставити строго використання у верхній частині кожного файлу. Тож технічно я все ще пишу модулі CommonJS з деякими функціями ES6, включеними у V8?
May Oakes

7
Для детального вивчення "це модуль?" , див. nczonline.net/blog/2016/04/… "... хоча наявність імпорту чи експорту може вказувати на модуль, відсутність імпорту чи експорту не чітко вказує на те, що файл не є модулем. Отже, існує немає ефективного способу автоматичного виявлення того, що файл є модулем під час розбору. "
птім

1
Що саме таке "модуль"? Я отримую strictпомилку (із попередньо встановленим AirBnB ) у сценарії, що складається лише з "use strict"; console.log('foo'). Це модуль?
Дан Даскалеску
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.