Как понять работу переменных let?
"Поднимается" объявление переменной, но не присваивание значения. Сделайте console.log(temp) сразу после объявления left и right - увидите, что там undefined.
"Сверху" она только была объявлена, операция присваивания произошла там, где она и должна происходить.
(5 строка)
Самым очевидным образом ваш код выглядит такvar temp;
let left='левый';
let right='правый';

{
  temp=left;
  left=right;
  right=temp;
}