Т.к. это AS1, то объявлять функции в таком виде не есть криминал и просто нужно вместо mc использовать this.
Можно себе представить вот такой вот бардак:

Код:
a();
x = function () {
trace('x() called');
};
function a() {
trace('a() '+this);
link = this;
function b() {
trace('b() '+this+','+link);
function c() {
trace('c() '+this);
}
c();
}
d = function () {
trace('d() '+this);
e = function () {
trace('e() '+this+', d: '+this.d);
};
e();
};
f = function () {
trace('f() '+this);
var g = function () {
trace('g() '+this+','+this.self);
};
g.prototype.self = this;
g();
new g();
};
b();
d();
f();
h = {};
h.e = e;
trace('h.e: '+(h.e === e));
h.e();
trace('c: '+c);
c();
trace('x: '+x);
x();
}
trace('Functions: '+[a, b, c, d, e, f, g, h, x]);
Кто на кого ссылается здесь ещё в принципе нормально (вот h.e() уже ссылается не туда, куда думается), а вот довольно забавный момент с «x» (ну это, правда, не относится конкретно к областям видимости, но забавно). Когда я вижу подобный код, я просто закрываю исходник и все.