El atributo asíncrono se ignora si la etiqueta no tiene src? Porque diferir es, pero no puedo encontrar información sobre async.
Este atributo afecta la obtención de JavaScript. Si no tiene src, no hay nada que buscar.
También puede hacer una prueba simple para comprobar cómo funciona. Spoiler: no hace nada como se esperaba.
<script> console.log("sync 1") console.log(document.getElementById('test') != null) </script> <script async> console.log("async") document.write('<div id="test"></div>') </script> <script> console.log("sync 2") console.log(document.getElementById('test') != null) </script>