Ответ 1
Потому что eval
вводит новый блок кода. Объявление с использованием var
объявит переменную за пределами этого блока кода, так как var
объявляет переменную в области функций.
let
, с другой стороны, объявляет переменную в области блока. Таким образом, ваша переменная b
будет видна только в вашем блоке eval
. Он не отображается в области вашей функции.
Подробнее о различиях между var и let
EDIT: Чтобы быть более точным eval
+, let
, фактически, создадим Лексическую среду. См. Ответ @RobG в определении переменной const с помощью eval()