Je tente de déclarer une fonction en dehors de la fonction anonyme, mais ont encore acess à toutes les fonctions anonymes des variablesJavascript fonction des variables de changement de périmètre
Ci-dessous démontre ce dont je parle.
J'ai juste besoin de me débarrasser d'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();
Edit: L'objectif de cette question était de garder finalement la portée globale propre de tonnes de variables, mais la commodité d'accès, définissez et appelant comme si elles étaient mondiale. J'ai conclu qu'il y a un moyen de faire ce que je veux, mais il nécessite une fonctionnalité obsolète en javascript. Voici un exemple de code montrant comment accomplir ce qui précède sans évaluation. This article explique comment utiliser "avec".
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();
Vous avez une variable locale avec le nom "appearingToBeGlobalFunction" ... c'est un paradoxe. Pourquoi pensez-vous que la fonction affectée à cette variable locale doit être globale? C'est local. –
@ Šime Vidas: Il n'a pas utilisé 'var' pour définir cette variable, donc il est défini dans le contexte global. Il devrait être renommé 'apparingToBeGlobalFunctionAndActuallyIs'. –
Oui, il l'a fait. Les variables "variableScope" et "apparing ..." sont des variables locales. (Remarquez la virgule séparatrice entre eux). http://stackoverflow.com/questions/694102/declaring-multiple-variables-in-javascript –