Когда браузер обрабатывает документ HTML и встречает тег, его необходимо выполнить перед продолжением построения DOM. Поскольку вы пытаетесь получить доступ к document.querySelector ('. Test'), который в данный момент недоступен, он выдал неопределенное значение. Посмотрите на приведенный ниже код, где скрипт выполняется без неопределенности после загрузки dom.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div class="test"></div>
</body>
<script>
function myname(){
document.write('Im john doe ')
}
function myage(){
myname();
document.write('Im 47 years old')
}
document.addEventListener("DOMContentLoaded", () => {
document.querySelector('.test').innerHTML=myage()
});
</script>
</html>