2017-08-29 1 views
0

Je trouve que pour que mon code fonctionne, je dois déclarer toutes mes variables (ou au moins 80%) et les instancier localement, même si Je l'ai déjà fait dans le cadre d'une fonction de cadrage ... pourquoi est-ce? Par exemple:Avoir à déclarer des variables javascript dans des fonctions après les avoir déclarées dans les fonctions de portée

$(function() { 
    var cUnit, fUnit, temp, wind, humidity, weatherDescrpt, wData; 
    cUnit = true; 
    fUnit = false; 

    $("#fUnit").click(function() { 
    var cUnit = true; 
    var fUnit = false; 
    toggleTemp(cUnit,fUnit); 
    }); 

    function setAttribute(wData) { 
    cUnit = true; 
    fUnit = false; 
    temp = displayTemp(wData.main.temp,fUnit); 
    } 
}); 

MISE À JOUR --- Je crois avoir enfin trouvé la question ... si un trop grand nombre de déclarations toggleTemp() .. les choses semblent bien aller maintenant

+1

Le code que vous ne montrez besoin des variables définies localement, [travaille ici] (https: // jsFiddle .net/45uhz1ee /). Vous avez probablement un autre code qui cause le problème. Afficher plus de votre code actuel, et peut-être fournir un exemple [Minimal, complet et vérifiable] (https://stackoverflow.com/help/mcve) –

+0

Quelle est la partie qui ne fonctionne pas sans variables locales? Rien dans le code affiché n'appelle votre fonction 'setAttribute()', mais cette fonction est le seul endroit qui essaie d'utiliser les variables de la fonction externe. Pouvez-vous s'il vous plaît [modifier] votre question pour montrer un exemple complet de quelque chose qui, selon vous, devrait fonctionner mais pas, et inclure quelques commentaires dans le code pour indiquer quelle (s) ligne (s) vont mal? – nnnnnn

+0

@Patrick & @ nnnnnn ... Mes excuses, je suis nouveau à empiler et je ne savais pas s'il était permis de placer "trop" du code .. Je vais modifier ma question pour montrer avec espoir où je pense que ça va mal ... en plus, j'ai saisi certaines de vos suggestions, donc je reçois certaines des fonctionnalités souhaitées, mais pas toutes –

Répondre

0

Dans l'exemple que vous ont montré, vous n'avez en fait besoin absolument pas de variables locales (à l'exception du paramètre wData):

$(function() { 
    $("#fUnit").click(function() { 
    toggleTemp(true, false); 
    }); 

    function setAttribute(wData) { // looks like dead code that is called from nowhere 
    displayTemp(wData.main.temp, false); 
    } 
}); 

Bien sûr, vous pouvez (et peut-être devrait) factoriser les constantes des variables locales. Mais alors, vous le feriez ne Déclarez et les affecter dans votre champ de module, nulle part ailleurs:

$(function() { 
    const cUnit = true; 
    const fUnit = false; 
    $("#fUnit").click(function() { 
    toggleTemp(cUnit, fUnit); 
    }); 

    function setAttribute(wData) { 
    displayTemp(wData.main.temp, fUnit); 
    } 
});