Désolé si cela a déjà été répondu, mais je ne pouvais pas trouver une réponse appropriée ici.Portée variable dans modulaire Javascript
J'ai commencé à écrire mon code javascript dans un style modulaire dernièrement et j'ai une question concernant le fonctionnement de la variable variable du module.
Le code suivant me donne une réponse contradictoire.
J'ai un module nommé Base qui déclare deux chaînes et un tableau. Il a également une fonction appelée fetchData qui utilise le raccourci jQuery getJSON pour définir ces variables avec les données du serveur. Malheureusement, lorsque je demande la chaîne string1 ou string2 de Base, je ne suis pas définie. Je comprends que cela est probablement dû au fait que je lui ai donné deux valeurs profondes à leurs valeurs (à l'intérieur du callback AJAX et à l'intérieur de fetchData) et la portée le limite en voyant Base.string1 et Base.string2. Cependant, lorsque je regarde Base.array1 depuis l'extérieur du module, il est défini sur les données appropriées que j'ai extraites du serveur, même si elles ont la même portée que les chaînes.
Voici le code:
namespace.Base = (function(){
var string1, string2, array1 = [];
function fetchData(){
$.getJSON('backendScript.php', function(data){
string1 = data.string1;
string2 = data.string2;
arrayCount = data.arr.length;
for(var i = 0; i<arrayCount; i++){
array1[i] = data.arr[i];
}
})
}
return{
fetchData: fetchData,
string1: string1,
string2: string2,
array1: array1
}
})();
Si je change
string1 = data.string1;
à
namespace.Base.string1 = data.string1;
cela fonctionne comme je veux. Donc, ma question est, pourquoi est-ce que array1 est correctement défini quand il est défini dans la même portée que les chaînes?
De même, quel est le remède pour la définition de variables de niveau module à partir des fonctions du module sans avoir à donner un chemin global (par exemple namespace.Base.string1)?
Souvenez-vous de upvote * toutes * réponses qui vous sont utiles. Cochez celui qui répond le mieux à votre question. Si aucun n'est «vérifiable» alors faites juste les upvotes pour toutes les réponses utiles. –
Je suis nouveau ici, donc je vais upvote dès que j'ai 15 réputation. – Dan
Hmmm, bon point. Bienvenue dans Stack Overflow. –