Javascript функция изменения переменных области видимости

Я пытаюсь объявить функцию вне анонимной функции, но все еще имею доступ ко всем переменным анонимных функций

Ниже демонстрируется то, о чем я говорю.

Мне просто нужно избавиться от Eval.

//Used to determine where the variable is being stored
var variableScope = "global";

(function(window){
        var variableScope = 'insideFunction',
        appearingToBeGlobalFunction = function(){
                alert("This Function appears Global but really isn't");
        };
        window["addFunction"]=function(funName,fun){
                //window[funName] = fun;  Doesn't work
                eval("window[funName]="+fun+";");
        }
})(window);

addFunction("alertTest",function(){
        alert(variableScope);
        appearingToBeGlobalFunction();
});

//should alert "insideFunction" and "This Function appears Global but really isn't"
alertTest();

Редактировать: Цель этого вопроса состояла в том, чтобы в конечном итоге сохранить глобальную область действия чистой от множества переменных, но при этом иметь удобство доступа, установки и вызова, как если бы они были глобальными. Я пришел к выводу, что есть способ сделать то, что мне нужно, но это требует устаревшей функциональности в javascript. Вот пример кода, показывающего, как выполнить вышеупомянутое без eval.Эта статья обсуждает, как использовать «с».

var variableScope = "global";

var customScope = {
        variableScope : 'insideFunction',
        appearingToBeGlobalFunction : function(){
                alert("This Function appears Global but really isn't");
        }
};

function alertTest(){
        with(customScope){
             alert(variableScope);
             appearingToBeGlobalFunction();
        }
};

//should alert "insideFunction" and "This Function appears Global but really isn't"
alertTest();​

Ответы на вопрос(4)

Ваш ответ на вопрос