Я пытаюсь объявить функцию вне анонимной функции, но все еще имею доступ ко всем переменным анонимных функций
Ниже показано, о чем я говорю.
Мне просто нужно избавиться от 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();