function foo(str, a) {
eval( str );
console.log( a, b );
}
foo( "var b = 3;", 1 );
Это работает отлично, но когда мы используем let вместо var, это не работает. Зачем?
Ответ 1
Потому что eval вводит новый блок кода. Объявление с использованием var объявит переменную за пределами этого блока кода, так как var объявляет переменную в области функций.
let, с другой стороны, объявляет переменную в области блока. Таким образом, ваша переменная b будет видна только в вашем блоке eval. Он не отображается в области вашей функции.