Globalaus kintamojo nustatymas „JavaScript“ funkcijoje

Ar „JavaScript“ funkcijoje galima nustatyti pasaulinį kintamąjį?

Noriu naudoti trailimage kintamąjį (deklaruotą makeObj funkcijoje) kitose funkcijose.

 <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> 
403
26 апр. 26 val. 2011-04-26 09:36 '11 at 9:36 am 2011-04-26 09:36
@ 11 atsakymų

Taip, kaip sakė kiti, galite naudoti pasaulinį mastą (be visų funkcijų), kad paskelbtumėte visuotinį kintamąjį:

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

Arba galite priskirti turinį window :

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

... nes naršyklėse pasauliniai kintamieji, deklaruoti su var yra window objekto savybės. (Naujausioje „ECMAScript 2015“ specifikacijoje nauji „ const , „ class ir „ class operatoriai sukuria pasaulinius kintamuosius, kurie nėra pasaulinio objekto savybės, bet nauja koncepcija ES2015.)

(Taip pat yra netiesioginių pasaulių siaubas , bet nedarykite to tikslo ir darykite visas pastangas, kad išvengtumėte jo atsitiktinai, galbūt naudojant ES5 "use strict" .)

Visa tai pasakė: jei įmanoma, vengsiu pasaulinių kintamųjų (ir beveik neabejotinai galėsite). Kaip jau minėjau, jie tampa window ypatybėmis, o window jau beveik užpildytas su visais elementais su id (ir daugeliu su tik name ), ir, nepaisant šio paruošto specifikacijos, IE atstato viską su name .

Vietoj to, apvyniokite savo kodą į taikymo sritį ir naudokite vietinius rodiklius aprėpties funkcijai ir atlikite kitus funkcijų uždarymus:

 <script> (function() { // Begin scoping function var yourGlobalVariable; // Global to your code, invisible outside the scoping function function foo() { // ... } })(); // End scoping function </script> 
622
26 апр. Atsakymas, kurį pateikė TJ Crowder balandžio 26 2011-04-26 09:44 '11 at 9:44 2011-04-26 09:44

UPDATE1: Jei perskaitysite komentarus, ši konkreti pavadinimo konvencija yra gerai aptarta.

UPDATE2: Atrodo, kad nuo mano atsakymo paskelbimo, pavadinimo konvencija tapo formalesnė. Žmonės, kurie moko, rašo knygas ir tt, kalbėti apie var deklaraciją ir function deklaraciją.

border=0

UPDATE3: čia yra papildomas vikipedijos straipsnis, kuris palaiko mano punktą: http://en.wikipedia.org/wiki/Declaration_(computer_programming)#Declarations_and_Definitions

... ir atsakykite į pagrindinį klausimą. DEKLARE prieš jūsų funkciją. Tai veiks ir bus laikomasi geros praktikos skelbti savo kintamuosius stiklo viršuje :)

17
16 нояб. atsakymas pateikiamas op1ekun 16 lapkričio. 2012-11-16 13:20 '12, 13:20, 2012-11-16 13:20

Tiesiog praneškite

 var trialImage; 

išorėje Tada

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

Tikiuosi, kad tai padės.

12
26 апр. atsakymas pateikiamas Harihb 26 balandžio. 2011-04-26 09:41 '11 at 9:41 am 2011-04-26 09:41

Ne, jūs negalite. Tiesiog nurodykite kintamąjį už funkcijos ribų. Jums nereikia tuo pačiu metu deklaruoti vertės priskyrimo:

 var trailimage; function makeObj(address) { trailimage = [address, 50, 50]; 
10
26 апр. Guffa atsakymas, pateiktas balandžio 26 d 2011-04-26 09:43 '11 at 9:43 am 2011-04-26 09:43

Paprasčiausiai paskelbite ją išorinėmis funkcijomis ir priskirkite funkcijas viduje. Kažkas panašaus:

 <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 

Arba tiesiog ištrindami „var“ iš savo kintamojo vardo funkcijos viduje, jis tampa visuotiniu, tačiau geriau švaresnį kodą paskelbti ne vieną kartą. Tai taip pat veiks:

 var offsetfrommouse = [10, -20]; var displayduration = 0; var obj_selected = 0; function makeObj(address) { trailimage = [address, 50, 50]; //GLOBAL VARIABLE , ASSIGN VALUE 

Tikimės, kad šis pavyzdys paaiškins daugiau: 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); 
8
26 апр. Atsakymą DhruvPathak pateikė balandžio 26 d 2011-04-26 09:41 '11 at 9:41 am 2011-04-26 09:41

Labai paprasta apibrėžti trailimage kintamąjį už funkcijos ribų ir nustatyti jos reikšmę funkcijoje makeObj. Dabar galite pasiekti jo vertę iš bet kurios vietos.

 var offsetfrommouse = [10, -20]; var displayduration = 0; var obj_selected = 0; var trailimage; function makeObj(address) { trailimage = [address, 50, 50]; .... } 
2
26 апр. Bharatas atsakė balandžio 26 d 2011-04-26 09:44 '11 at 9:44 2011-04-26 09:44
  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; 

Suprantu, kad šioje srityje yra daug sintaksės klaidų, tačiau tai yra bendroji idėja ... Dėkojame LayZee už tai, kad tai nurodė ... Galite sužinoti, kad vietinė ir sesijos saugykla yra adresu http://www.w3schools.com/html /html5_webstorage.asp . Reikėjo to paties dalyko mano kodui, ir tai buvo tikrai gera idėja.

1
17 янв. Atsakymą pateikė ShanerM13 sausio 17 d 2014-01-17 17:16 '14, 17:16, 2014-01-17 17:16

Klasikinis pavyzdys:

 window.foo = 'bar'; 

Šiuolaikiškas, saugus pavyzdys, atitinkantis geriausią praktiką, naudojant IIFE :

 ;(function (root) { 'use strict' root.foo = 'bar'; )(this)); 

Šiuo metu taip pat yra galimybė naudoti „WebStorage“ API

 localStorage.foo = 42; 

arba

 sessionStorage.bar = 21; 

Našumas, aš nesu įsitikinęs, kad jis yra žymiai lėtesnis nei vertės išsaugojimas kintamuosiuose.

Platus naršyklės palaikymas, kaip nurodė „ Ar galiu naudoti“

0
29 нояб. atsakymą pateikė Larsas Gyrupas Brinkas Nielsenas lapkričio 29 d. 2013-11-29 12:28 '13, 12:28, 2013-11-29 12:28

Štai keletas pavyzdžių kodų, kurie gali būti naudingi.

  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 

Čia aš rasiu malonų atsakymą: „ Kaip-vienas-deklaruoti-a-globalinis kintamasis„ JavaScript “

-1
24 июля '15 в 8:23 2015-07-24 08:23 Shohanur Rahamano atsakymas liepos 24 d. 15 d. 8:23 val. 2015-07-24 08:23

Čia yra dar vienas paprastas būdas padaryti kintamąjį kitose funkcijose, nenaudojant pasaulinių kintamųjų:

Jei naudojate paleisties funkciją, tokiu būdu galite apibrėžti pasaulines funkcijas ir kintamuosius:

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

Kadangi ši funkcija yra vadinama visame pasaulyje, šis argumentas yra pasaulinis. Taigi kažkas turi būti pasaulinė.

-2
22 сент. atsakymas duotas Konstantinui Isaevui rugsėjo 22 d 2012-09-22 16:18 '12 at 16:18 2012-09-22 16:18