Да, я так понял что в случае выше alert тянет глобальную переменную, а не с контекста вызова функции.
Примерно похожее накатал, проверяя:
var a = true;
let name = 'Антон';
if(a == true){
getName();
function getName(){
let name = 'Вася';
sayHi(name);
}
}else {
getName2();
function getName2(){
let name = 'Вова';
sayHi(name);
}
}
function sayHi(a) {
alert(a);
}
В этом случае также выводит имя в зависимости от контекста вызова функции
Александр Nameless08, это избыточно: 2 раза объявлять функцию, когда можно всего лишь передать ей нужный параметр для исполнения. А брать из функции внешнюю переменную хорошо лишь при замыкании. Во всех остальных случаях это чревато загаживанием глобального скопа.
let name = "Вася"; // переменная в области видимости window
function sayHi() {
alert(name);
}
setTimeout(function() { // анонимная функция
let name = "Петя"; // переменная видна только внутри этой анонимной функции
sayHi();
}, 1000);