Mai mult
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>
478
12
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ă:
Alternativ, aveți posibilitatea să atribuiți o proprietate pe "fereastra":
...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, noul
hai,
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:
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 :)
Doar declare
afară. Apoi
Sper că acest lucru vă ajută.
Doar să declare, în afara funcțiilor, și atribui valori în interiorul funcțiilor. Ceva de genul:
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,:
Sper ca acest exemplu explica mai multe: http://jsfiddle.net/qCrGE/
Nu, ai poate't. Doar declara variabila în afara funcției. Nu't trebuie să declare, în același timp, ca ai atribui valoarea:
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.
Î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ă.
Exemplu clasic:
Modern, sigur exemplu, următoarele cele mai bune practici prin utilizarea unui VIAȚA:
În zilele noastre, nu's, de asemenea, opțiunea de a utiliza WebStorage API
sau
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...
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...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.
Aici este un exemplu de cod care poate fi helful.
Aici am găsit un răspuns frumos Cum-poate-un-declara-o-global-variabilă-în-JavaScript
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:
dacă vi se face o funcția de pornire, puteți defini funcții globale și variabile astfel:
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.