Defini variabile globale într-o funcție JavaScript

Este posibil să se definească o variabilă globală într-o funcție JavaScript?

Vreau folosi trailimage variabile (declarate în `makeObj funcția) în alte funcții.

<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>
Comentarii la întrebare (4)
Soluția

Da, cum au spus si altii, puteți utiliza var `de la aplicare la nivel mondial (în afara de toate funcțiile) de a declara o variabilă globală:

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

Alternativ, aveți posibilitatea să atribuiți o proprietate pe "fereastra":

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

...pentru că în browsere, toate variabilele globale variabile globale declarat cu var sunt proprietăți ale "fereastra" de obiect. (În cele mai recente caietul de sarcini, ECMAScript 2015, noulhai,const`, și "clasa" declarații de aplicare la nivel mondial a crea globals care nu't proprietăți ale obiectelor globale; un nou concept în ES2015.)

(Nu's, de asemenea, oroarea implicit globals, dar don't făcut-o intenționat și de a face cele mai bune dvs. pentru a evita o fac de accident, poate cu ajutorul ES5's "de utilizare strict".)

Tot ce a spus: am'd evita variabile globale, dacă poți (și aproape sigur se poate). După cum am menționat, ei sfârșesc prin a fi proprietăți de "fereastra", iar "fereastra" este deja o multime suficient de aglomerat cu toate elementele cu un " id "(și de multe doar cu un "nume") fiind aruncat în ea (și indiferent că viitoarele caietul de sarcini, de EXEMPLU, haldele de doar despre orice cu un "nume" pe acolo).

În schimb, folie codul în funcția de definire a domeniului și de a folosi variabile locale pentru funcția de definire a domeniului, și de a face alte funcții de închidere în cadrul acestuia:

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

UPDATE1: Daca ai fi citit comentariile de acolo's o frumoasă discuție în jurul acestui convenție de denumire.

UPDATE2: Se pare că, din răspunsul meu a fost postat convenția de denumire a devenit mai formale. Oamenii care predau, scriu cărți etc. vorbesc despre var `declarație, și "funcție" declarația.

UPDATE3: Aici este suplimentar wikipedia post care acceptă punctul meu de vedere: http://en.wikipedia.org/wiki/Declaration_(computer_programming)#Declarations_and_Definitions

...și pentru a răspunde la întrebarea principală. DECLARA variabila înainte de funcția ta. Acest lucru va lucra și se va conforma cu buna practică de a declara variabile în partea de sus a domeniul de aplicare :)

Comentarii (8)

Doar declare

var trialImage;

afară. Apoi

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

Sper că acest lucru vă ajută.

Comentarii (0)

Doar să declare, în afara funcțiilor, și atribui valori în interiorul funcțiilor. Ceva de genul:

<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

Sau pur și simplu eliminarea "var" de la numele variabilei în interiorul funcției, de asemenea, face global, dar este mai bine să-l declare în afara odata pentru cod curat. Acest lucru va lucra, de asemenea,:

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

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

Sper ca acest exemplu explica mai multe: 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);
Comentarii (0)

Nu, ai poate't. Doar declara variabila în afara funcției. Nu't trebuie să declare, în același timp, ca ai atribui valoarea:

var trailimage;

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

Este foarte simplu de a defini trailimage variabilă în afara funcției și setați valoarea sa în makeObj funcție. Acum puteți accesa valoarea de oriunde.

var offsetfrommouse = [10, -20];
var displayduration = 0;
var obj_selected = 0;
var trailimage;
function makeObj(address) {
      trailimage = [address, 50, 50];
      ....
}
Comentarii (0)
    var Global = 'Global';

    function LocalToGlobalVariable() {

    //This creates a local variable.

    var Local = '5';

    //Doing this makes the variable available for one session
    //(a page refresh - Its the session not local)

    sessionStorage.LocalToGlobalVar = Local;

    // It can be named anything as long as the sessionStorage references the local variable.
    // Otherwise it won't work
    //This refreshes the page to make the variable take effect instead of the last variable set.

    location.reload(false);
    };

    //This calls the variable outside of the function for whatever use you want.

    sessionStorage.LocalToGlobalVar;

Îmi dau seama că există, probabil, o mulțime de erori de sintaxă în acest dar ideea generala... Multumesc mult LayZee pentru a evidenția acest lucru... puteți găsi ceea ce un localnic și-a sesiune de Stocare este de la http://www.w3schools.com/html/html5_webstorage.asp. Am nevoie de același lucru pentru codul meu și acest lucru a fost o idee foarte bună.

Comentarii (1)

Exemplu clasic:

window.foo = 'bar';

Modern, sigur exemplu, următoarele cele mai bune practici prin utilizarea unui VIAȚA:

;(function (root) {
    'use strict'

    root.foo = 'bar';
)(this));

În zilele noastre, nu's, de asemenea, opțiunea de a utiliza WebStorage API

localStorage.foo = 42;

sau

sessionStorage.bar = 21;

Performancewise, am'm nu sunt sigur dacă acesta este vizibil mai lent decât stocarea valori în variabile.

Răspândită sprijin browser-ul după cum se menționează pe Pot folosi...

Comentarii (4)

Deci vrei variabilă în funcție disponibilă în afara funcției? De ce să nu se întoarcă rezultatele de variabilă în funcție? var x = funcția returnX { var x = 0; return x; } este ideea...




    <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('');
            obj_selected = 1;
            return trailimage;
        }

        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>






Nu am't testat acest lucru, dar în cazul în care codul a lucrat înainte de aceasta mica schimbare, atunci ar trebui să funcționeze.

Comentarii (0)

Aici este un exemplu de cod care poate fi helful.

  var Human = function(){
   name = "Shohanur Rahaman";  // global variable
   this.name = "Tuly"; // constructor variable 
   var age = 21;
 };

  var shohan = new Human();

 document.write(shohan.name+"<br>");
 document.write(name);
 document.write(age); // undefined cause its local variable 

Aici am găsit un răspuns frumos Cum-poate-un-declara-o-global-variabilă-în-JavaScript

Comentarii (1)

Aici este o altă metodă ușoară de a face variabila disponibile în alte funcții, fără a fi nevoie de a folosi variabile globale:

function makeObj() {
  // var trailimage = 'test';
  makeObj.trailimage = 'test';
}
function someOtherFunction() {
  document.write(makeObj.trailimage);
}

makeObj();
someOtherFunction();
Comentarii (0)

dacă vi se face o funcția de pornire, puteți defini funcții globale și variabile astfel:

function(globalScope)
{
     //define something
     globalScope.something() { 
         alert("It works");
     };
}(window)

Deoarece funcția este invocat la nivel global, cu acest argument, aceasta este globală domeniul de aplicare aici. Deci, ceva ar trebui să fie un lucru la nivel mondial.

Comentarii (1)