Почему не создаётся замыкание?
Функция, которую объявляешь в объекте, не будет иметь контекст этого объекта. В твоем случае он у не свой. Если использовать стрелочную функцию () => {}, то ее контекстом будет тот, в котором объявлен сам объект в котором объявлена функция. Коротко говоря, ты не можешь обратиться через this к объекту в котором объявлена функция. Чтоб это произошло надо либо делать как-то иначе, либо задать ей нужный контекст.function User() {
  this.firstName = "Вася";

  this.sayHi = () => {
    return this.firstName;
  }
}

let user = new User()

console.log(user.sayHi());
Потому что контекст это не замыкание. Разумеется this нет в closure.
Замыкание это ссылки на переменные из внешнего лексического окружения, которые использует ваша функция. А this это ссылка на текущий конекст, он может меняться.
Вот, должно все прояснить jsfiddle.net/xuxicheta/u7jzfgm2/6