Можно использовать
arguments.callee
.
При этом весь scope func1 останется (см. значение переменной i)
function func1(){
var i = 3;
function func2(){alert("hi, i'm fired from func2\r\ni=" + i)}
arguments.callee.func2 = func2;
}
func1();
i = 42;
func1.func2();