На данный момент все скрипты JavaScript, загружаются через CJSCore::Init в синхронном режиме, т.е. блокируют прорисовку страницы.
Идея состоит в том, чтобы дать возможность инициализировать скрипты в асинхронном режиме, если в настройках кеширования не стоит галочка "Объединять JS файлы"
Но вот использовать это в методе addHeadScripts мне кажется разумно.
При этом это становиться не актуально при использование объединения js.
Да и можно использовать add head string, но при этом не будет отдaвать ваш скрипт в CDN облако битрикс.
Объясню, почему AddHead(String/Script) в моем понимании хуже. Предположим, что у меня на странице N компонентов, которые в шаблоне используют какую-нибудь библиотеку myLib.js. Если использовать использовать RegisterExt и правило именования расширений, то в конечном итоге браузер загрузит только одну myLib.js, а если подключать их через AddHead(String/Script), есть шанс что библиотека будет подключена от 1 до N раз - что неминуемо приведет к конфликту.