Когда НЕ использовать "строгий режим" в javascript?

Я нашел этот пост Что такое "use strict" делать в JavaScript и каковы причины этого?

И я понимаю, что я должен use strict всегда.

Но мне интересно, если это правда, всегда лучше использовать "строгий режим", тогда он даже не будет существовать, потому что это будет поведение по умолчанию.

Итак, я искал определение ECMAScript 6th edition и обнаружил, что он по умолчанию используется во многих случаях.

Соответственно официальная документация о строгом режиме

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

G lobal code - это строгий режимный код, если он начинается с директивы Prologue который содержит ссылку на использование Strict (см. 14.1.1).

M - это всегда строгий режимный код.

A Несколько частей ClassDeclaration или ClassExpression являются строгим кодом режима.

E Код val - это строгий режимный код, если он начинается с директивного пролога, содержащего директиву Use Strict, или если вызов eval является прямой оценкой (см. 12.3.4.1), которая содержится в строгий режим.

F unction code - это строгий режимный код, если связанное с ним FunctionDeclaration, FunctionExpression, GeneratorDeclaration, GeneratorExpression, MethodDefinition или ArrowFunction содержится в коде строгого режима или если код, который генерирует значение функций [ [ECMAScriptCode]] внутренний слот начинается с директивного пролога, содержащего директиву Use Strict.

F код деблокирования, который поставляется в качестве аргументов встроенным конструкторам Function и Generator, является строгим кодом режима, если последним аргументом является String, который при обработке является FunctionBody, который начинается с Директивы Пролог, содержащий строку "Использовать строгую директиву".

Код ECMAScript, который не является строгим кодом режима, называется нестрогимкод.

Итак, когда хороший выбор использовать нестрогий код?

Спасибо заранее.

Ответ 1

Итак, когда хороший выбор - не использовать строгий режим?

Строгий режим будет вызывать опорную ошибку при обнаружении не объявленных переменных и в некоторых случаях.

Если у вас такой неограниченный тип кода, то используются переменные без объявления. Одна переменная, объявленная внутри некоторой функции/области действия и используемая где-то в другом месте (она будет не указана там), и вы не можете ее переписать/изменить, тогда вы не должны идти в режиме "use strict;", потому что она сломает код.

Из MDN

Строгий режим вносит несколько изменений в обычную семантику JavaScript.

  • строгий режим устраняет некоторые ошибки JavaScript, изменяя их, чтобы выбросить ошибки.
  • строгий режим исправляет ошибки, которые затрудняют выполнение JavaScript-движками: строгий режимный код иногда может запускаться быстрее, чем идентичный код, а не строгий режим. Строковый режим
  • запрещает некоторый синтаксис, который может быть определен в будущих версиях ECMAScript.

Когда в strict mode

Вы не можете просто использовать переменные, не объявляя их так же, как в нестандартном режиме

Это

Следующее будет работать, потому что это нестрогий режим

a = "Hello World";
console.log(a);

Следующие действия не будут работать, поскольку они находятся в строгом режиме

'use strict';
a = "Hello World";  // => Throw a reference error
console.log(a);

Вышеприведенный код выдает опорную ошибку, поскольку переменная a используется без объявления ее.

Итак, вы должны использовать

'use strict';
var a = "Hello World";
console.log(a);

Пример в нестандартном режиме

a = "Hello World";
console.log(a);

Ответ 2

Итак, когда хороший выбор - не использовать строгий режим?

Если вы используете старый (или сторонний) код, который еще не успел обновить.

Строгий режим просто лучше. Он не включен по умолчанию, потому что он сломает старый код, который не был написан с учетом этого.

Ответ 3

В соответствии с приведенной ниже ссылкой MDN: -

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Strict_mode

Строгий режим в браузерах

Основные браузеры теперь реализуют строгий режим. Однако не слепо зависят от него, поскольку все еще существуют многочисленные версии браузера, используемые в дикие, которые имеют только частичную поддержку строгого режима или не поддерживайте его вообще (например, Internet Explorer ниже версии 10!). строгий режим изменяет семантику. Опора на эти изменения приведет к ошибкам и ошибки в браузерах, которые не реализуют строгий режим. Упражнение осторожность в использовании строгого режима и резервное копирование зависимости от строгого режима с которые проверяют, являются ли соответствующие части строгого режима реализованы. Наконец, обязательно проверьте свой код в браузерах, которые делают и не поддерживают строгий режим. Если вы тестируете только в браузерах, которые не поддерживайте строгий режим, вы, скорее всего, будете иметь проблемы с браузерами что делают, и наоборот.

Ответ 4

Итак, когда хороший выбор - не использовать строгий режим?

Добавление к другим ответам, если ваш код javascript генерируется или компилируется сторонней библиотекой. Вы не хотите манипулировать им, потому что вы его не пишете.