Все-таки жесть этот JavaScript.
Нужна лексическая область видимости -- юзайте лексическую, нужна динамическая -- используйте ее, опять же.
А тут смешали бензин с кошачьим дерьмом, надеясь получить взрывную смесь, а получили... бензин с кошачьим дерьмом вперемешку.
Пусть дан такой кодец:
var x = 0;
var f = function() { return x; }
var g = function() { var x = 1; return f(); }
Если область видимости динамическая, то g вернет 1, а если лексическая -- то 0. И не нужные никакие activation objects, [[SCOPE]] и прочая муть.
Читать:
http://en.wikipedia.org/wiki/Scope_(programming) или SICP, там отличные примеры.
Ну и конкретно по JS:
http://www.digital-web.com/articles/...in_javascript/