669 votes

Définir une variable globale dans une fonction JavaScript

Est-il possible de définir une variable globale dans une fonction JavaScript?

Je veux utiliser l' trailimage (variable déclarée dans l' makeObj de la fonction) dans d'autres fonctions.

<html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title></title>
        <script type="text/javascript">
            var offsetfrommouse = [10, -20];
            var displayduration = 0;
            var obj_selected = 0;
            function makeObj(address) {
                **var trailimage = [address, 50, 50];**
                document.write('<img id="trailimageid" src="' + trailimage[0] + '" border="0"  style=" position: absolute; visibility:visible; left: 0px; top: 0px; width: ' + trailimage[1] + 'px; height: ' + trailimage[2] + 'px">');
                obj_selected = 1;
            }

            function truebody() {
                return (!window.opera && document.compatMode && document.compatMode != "BackCompat") ? document.documentElement : document.body;
            }
            function hidetrail() {
                var x = document.getElementById("trailimageid").style;
                x.visibility = "hidden";
                document.onmousemove = "";
            }
            function followmouse(e) {
                var xcoord = offsetfrommouse[0];
                var ycoord = offsetfrommouse[1];
                var x = document.getElementById("trailimageid").style;
                if (typeof e != "undefined") {
                    xcoord += e.pageX;
                    ycoord += e.pageY;
                }
                else if (typeof window.event != "undefined") {
                    xcoord += truebody().scrollLeft + event.clientX;
                    ycoord += truebody().scrollTop + event.clientY;
                }
                var docwidth = 1395;
                var docheight = 676;
                if (xcoord + trailimage[1] + 3 > docwidth || ycoord + trailimage[2] > docheight) {
                    x.display = "none";
                    alert("inja");
                }
                else
                    x.display = "";
                x.left = xcoord + "px";
                x.top = ycoord + "px";
            }

            if (obj_selected = 1) {
                alert("obj_selected = true");
                document.onmousemove = followmouse;
                if (displayduration > 0)
                    setTimeout("hidetrail()", displayduration * 1000);
            }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <img alt="" id="house" src="Pictures/sides/right.gif" style="z-index: 1; left: 372px;
            top: 219px; position: absolute; height: 138px; width: 120px" onclick="javascript:makeObj('Pictures/sides/sides-not-clicked.gif');" />
        </form>
    </body>
</html>

925voto

T.J. Crowder Points 285826

Oui, comme les autres l'ont dit, vous pouvez utiliser var au niveau global (en dehors de toutes les fonctions) pour déclarer une variable globale:

<script>
var yourGlobalVariable;
function foo() {
    // ...
}
</script>

Alternativement, vous pouvez affecter à une propriété sur window:

<script>
function foo() {
    window.yourGlobalVariable = ...;
}
</script>

...parce que dans les navigateurs, toutes les variables globales sont des propriétés de l' window objet.

(Il ya aussi l'horreur de l'implicite globals, mais ne pas le faire sur le but et de faire de votre mieux pour éviter de le faire par accident.)

Tout ce que dit: j'aimerais éviter les variables globales si vous le pouvez (et vous avez presque certainement peut). Comme je l'ai mentionné, ils finissent par être les propriétés de l' window, et window est déjà beaucoup bondé assez qu'est-ce avec tous les éléments avec un id (et beaucoup avec juste un name) l'objet d'un dumping (et peu importe que la prochaine spécification, c'est à dire décharges juste au sujet de quoi que ce soit avec un name sur de là).

Au lieu de cela, enveloppez votre code dans un établissement de la portée de la fonction et de l'utilisation des variables locales à la portée de la fonction, et faire de vos autres fonctions fermetures à l'intérieur:

<script>
(function() { // Begin scoping function
    var yourGlobalVariable; // Global to your code, invisible outside the scoping function
    function foo() {
        // ...
    }
})();         // End scoping function
</script>

33voto

harihb Points 212

Il suffit de déclarer

var trialImage;

à l'extérieur. Alors

function makeObj(address) {
    trialImage = [address, 50, 50];
..
..
}

Espérons que cette aide.

23voto

op1ekun Points 1236

Une chose que personne n'a dit littéralement :) En javascript, Vous ne déclarez pas de vars. Vous ne définissent eux :)

EDITION/mise à JOUR: Si vous lisez les commentaires il y a une belle discussion autour de cette "convention de nommage" (?)

Chaque fois que vous avez taper fort Vous avez déclaration:

int myVar; // lorsque vous déclarez le type de votre var

et la définition

int myVar = 10; // lorsque vous définissez la valeur

EDIT: Voici le bac d'alimentation supplémentaire de wikipédia post qui confirment mon point de vue: http://en.wikipedia.org/wiki/Declaration_(computer_programming)#Declarations_and_Definitions

...et pour répondre à la question principale. DÉFINIR la variable avant de votre fonction. Cela fonctionne et qu'il sera conforme à la bonne pratique de déclarer vos variables dans le haut de la portée :)

19voto

DhruvPathak Points 16181

Il suffit de déclarer en dehors de l'fonctions, et d'affecter des valeurs à l'intérieur de la fonctions. Quelque chose comme:

<script type="text/javascript">
    var offsetfrommouse = [10, -20];
    var displayduration = 0;
    var obj_selected = 0;
    var trailimage = null ;  // GLOBAL VARIABLE
    function makeObj(address) {
        trailimage = [address, 50, 50];  //ASSIGN VALUE

Ou tout simplement en enlevant le "var" à partir de votre nom de variable à l'intérieur de la fonction permet également au niveau mondial, mais il est préférable de le déclarer à l'extérieur une fois de plus propre code. Cela permettra également de travailler:

var offsetfrommouse = [10, -20];
var displayduration = 0;
var obj_selected = 0;

function makeObj(address) {
    trailimage = [address, 50, 50];  //GLOBAL VARIABLE , ASSIGN VALUE

J'espère que cet exemple explique plus: http://jsfiddle.net/qCrGE/

var globalOne = 3;
testOne();

function testOne()
{
    globalOne += 2;
    alert("globalOne is : " + globalOne );
    globalOne += 1;
}

alert("outside globalOne is : " + globalOne);

testTwo();

function testTwo()
{
    globalTwo = 20;
    alert("globalTwo is " + globalTwo);
    globalTwo += 5;
}

alert("outside globalTwo is :" + globalTwo);

13voto

Guffa Points 308133

Non, vous ne pouvez pas. Il suffit de déclarer la variable en dehors de la fonction. Vous n'avez pas à déclarer en même temps que vous affectez la valeur:

var trailimage;
function makeObj(address) {
  trailimage = [address, 50, 50];

Edit: edit.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X