Приветствую. Вы немного заблуждаетесь.
по логике он должен поискать ее из функции function bar() так как там ее вызывали return foo();
Обратите внимание в каком scope находе foo. Поэкспериментируйте с функцией и перенесите ее в scope bar. Примерно так:
var x = 10;
function bar() {
var x = 2;
return foo();
function foo() {
var y = x + 5;
console.log(y);
return y;
}
}
foo();
bar();
console.log(x);
Т.к foo находится в глобальном scope (в вашем исходном примере), она всегда будет использовать глобальную переменную x.