Атрибут defer используется для скриптов, которым требуется доступ ко всему DOM-дереву, потому что он позволяет скриптам получать доступ к DOM и манипулировать им после его полной сборки. 2
Скрипты с атрибутом defer выполняются до запуска события DOMContentLoaded, что даёт возможность работать с DOM-деревом. 2
Кроме того, атрибут defer обеспечивает правильную последовательность выполнения скриптов, что важно, например, когда сначала нужно загрузить JavaScript-библиотеку, а затем скрипт, который от неё зависит. 1