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

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


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

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

Обертывание блока внутри IIFE, кажется, мешает линтеру жаловаться

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

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

2 ответа

Решение

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

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

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

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

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

Другие вопросы по тегам