function three() {
var a = 12
function four() {
a = 11
function five() {
alert(a)
}
return five
}
return four
}
three()()()
alert(a)
Проще говоря, a не определено, потому что, ну, оно не определено.
У вас нет переменной вне ваших функций.Чтобы существенно упростить это, вещи внутри набора curly не существуют вне этого набора curly.
Вы можете определить это перед функцией или передать в функцию, чтобы исправить это
function three() {
a = 12
function four() {
a = 11
function five() {
alert(a)
}
return five
}
return four
}
three()()()
alert(a)
Редактировать для комментария: Переменные, объявленные без var, всегда глобальные , поэтому избавление от var в 3 сделало бы это.