Потому что ты выполняешь скрипт до того как элемент 'p' добавлен в DOM.
Добавь элементу script атрибут defer и всё заработает.
Если тебе нужно найти один конкретный элемент, которому тем более присвоен id, то эффективнее искать по id.
Названия переменных должны описывать то что в них хранится, иначе твой код хрен поймешь, если код вырастет в размерах.
Нет смысла каждое свойство сохранять в собственную переменную, если ты не собираешься использовать переменную повторно.
textContent в твоём случае уместнее, так как он не тригерит обновление стилей и не парсит HTML, что будет быстрее и безопастнее.
Выглядит примерно так:
const elementP = document.getElementById('out');
console.log(elementP.textContent);