У меня есть очень простой вопрос:
Является ли хорошей практикой обернуть код внутри IIFE, когда я намереваюсь использовать " use strict
"?
Теперь я понимаю полезность закрытия Scope (см. Здесь и здесь) или, вероятно, еще лучше, полезность модульного подхода, который когда-либо существовал раньше, и почему IIFE является таким мощным инструментом, который будет использоваться (а не только) в эти сценарии, но это не тот вопрос, о котором идет речь.
То, что я заметил, большинство линтеров (включая jsfiddle), как правило, жалуются всякий раз, когда вы хотите использовать строгий режим в глобальной области:
Обертывание блока внутри IIFE, похоже, препятствует тому, чтобы linter
(function(){
"use strict";
console.log("I compiled!");
})();
Есть ли какие-либо основания относительно того, почему следует use strict;
храниться внутри IIFE, или это просто "необоснованное возражение", поднятое без надлежащей причины позади этого?
Если несколько сценариев объединяются вместе в один файл, один "use strict";
наверху делает весь код сценария в том одном файле строгим, что может вызвать проблемы для некоторых связанных скриптов, если они не предназначены для работы в строгом режиме. (Это не проблема, если они включены в разные теги script
, только если они связаны.)
Является ли хорошей практикой обернуть код внутри IIFE, когда я намереваюсь использовать
"use strict"
?
Вероятно, если вы используете связку. Если нет, это не имеет большого значения. Однако все чаще, поскольку модули ES2015 становятся более хорошо поддерживаемыми, использование модулей (которые вы можете делать с поставщиками сегодня) было бы еще лучшим выбором, и нет необходимости в директиве "use strict"
вообще (код модуля ES2015+ всегда строг).
Я думаю, это связано с тем, что, когда use strict
определения определено глобально, вы в конечном итоге вынуждаете всю свою стороннюю ссылку работать неправильно, если они не являются строгими. Теперь, поскольку у вас нет возможности гарантировать, что все загруженные ресурсы будут использоваться строго, вы рискуете вызвать проблемы...
Использование "строгого" внутри области означает, что владелец области ответственности несет ответственность за то, поддерживает ли его код строгий или нет