Является ли хорошей практикой заключать «строгий режим» в выражение IIFE (самовывоз)?

1

У меня есть очень простой вопрос:
Является ли хорошей практикой обернуть код внутри IIFE, когда я намереваюсь использовать " use strict "?


Теперь я понимаю полезность закрытия Scope (см. Здесь и здесь) или, вероятно, еще лучше, полезность модульного подхода, который когда-либо существовал раньше, и почему IIFE является таким мощным инструментом, который будет использоваться (а не только) в эти сценарии, но это не тот вопрос, о котором идет речь.

То, что я заметил, большинство линтеров (включая jsfiddle), как правило, жалуются всякий раз, когда вы хотите использовать строгий режим в глобальной области:

Изображение 174551

Обертывание блока внутри IIFE, похоже, препятствует тому, чтобы linter

(function(){
	"use strict";
	console.log("I compiled!");
})();

Есть ли какие-либо основания относительно того, почему следует use strict; храниться внутри IIFE, или это просто "необоснованное возражение", поднятое без надлежащей причины позади этого?

  • 1
    IIRC «использует строгий», так как декларация верхнего уровня делает все строго и может нарушать сторонние скрипты
  • 0
    @JaredSmith ..Если эти сторонние сценарии связаны вместе с одним из ваших сценариев, в котором есть «использовать строгий» (если сценарий, имеющий «использовать строгий», появляется перед сторонним сценарием.)
Теги:
compiler-warnings
strict
strict-mode

2 ответа

4
Лучший ответ

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

Является ли хорошей практикой обернуть код внутри IIFE, когда я намереваюсь использовать "use strict"?

Вероятно, если вы используете связку. Если нет, это не имеет большого значения. Однако все чаще, поскольку модули ES2015 становятся более хорошо поддерживаемыми, использование модулей (которые вы можете делать с поставщиками сегодня) было бы еще лучшим выбором, и нет необходимости в директиве "use strict" вообще (код модуля ES2015+ всегда строг).

1

Я думаю, это связано с тем, что, когда use strict определения определено глобально, вы в конечном итоге вынуждаете всю свою стороннюю ссылку работать неправильно, если они не являются строгими. Теперь, поскольку у вас нет возможности гарантировать, что все загруженные ресурсы будут использоваться строго, вы рискуете вызвать проблемы...

Использование "строгого" внутри области означает, что владелец области ответственности несет ответственность за то, поддерживает ли его код строгий или нет

Ещё вопросы

Сообщество Overcoder
Наверх
Меню