ugrás a tartalomhoz

A változók hatóköre

Velias9 · 2008. Feb. 18. (H), 13.19
Sziasztok!

A kérdésem a lenne, hogy, ha egy függvényen kívül létrehozott változót függvényen belül is el akarok érni, akkor mit kell tennem? A PHP-ben egy 'global' utasítás való erre, de a JavaScript-ben nem tudom, hogy hogyan kell. A másik, hogy, ha egy függvényben létrehozok egy változót, akkor hogyan kell 'return' használata nélkül függvényen kívül is használhatóvá tenni? Ennek a PHP-s megoldása is érdekelne!

Előre is köszönök minden segítséget!
 
1

példák

gex · 2008. Feb. 18. (H), 13.50
js/1:

var x = 1;
function whatIsX() {
    alert(x); // 1
}
js/2:

var x;
function setX(value) {
    x = value;
}

setX(1);
alert(x); // 1
ajánlott cikk: http://weblabor.hu/cikkek/oojsafelszinfolott

php/2:

function makeAGlobalVariable($name, $value) {
    $GLOBALS[$name] = 1;
}

makeAGlobalVariable('x', 1);
echo $x; // 1
2

window

vbence · 2008. Feb. 18. (H), 13.54
Egyik lehetőség, hogy egy mindenhonnan látható objektumra aggatod a változódat, például a window-ra:

window.akarmik = 8;

function addAkarmi() {
     window.akarmik++;
}

alert(window.akarmi);
addAkarmi();
alert(window.akarmi);
Picit professzionálisabb válasz: A js-ben egy belső szkóp mindig örökli a külsőben létrehozott változókat. Például ez határozottan helytelen:

function egyFunkcio() {
    meddig = 8;
    for (i=0; i<meddig; i++) {
        document.write(i);
    }
}
... mert ez a függvény a window.meddig -et és window.i -t fogja használni. Ha a klasszikus értelemben (mint pl phpben) vett lokális változókat szeretnél a függvényen belül, kkor ez a helyes módszer:

function egyFunkcio() {
    var meddig = 8;
    var i;
    for (i=0; i<meddig; i++) {
        document.write(i);
    }
}
Tehát a JS-ben azt kell jelölnöd, ha NEM globális változótszerenél készíteni ellentétben a PHPvel, ahol a lokális szkóp az alapértelmezett.

Ugyanez a helyzet, ha egymásba ágyazol függvényeket.


PHP-ben a fenti "window" módszerhez hasonlóan vannak superglobal-ok, például a $GLOBALS["valtozom"] mindenhonnan látszani fog. De használhatsz "cím szerinti" átadást is. Érték szerintinél ez:

function valtoztat($elso, $masodik, $osszeg) {
    $osszeg = $elso + $masodik;
}

$e = 1;
$m = 3;
$o = 0;
valzotat ($e, $m, $o);

echo ($o);    // az eredmeny 0
... cím szerintinél viszont ez a helyzet (különbség az & jel a $osszeg elött):

function valtoztat($elso, $masodik, &$osszeg) {
    $osszeg = $elso + $masodik;
}

$e = 1;
$m = 3;
$o = 0;
valzotat ($e, $m, $o);

echo ($o);    // az eredmeny 4
3

Tehát...

Velias9 · 2008. Feb. 18. (H), 17.09
Ezek szerint a JS-ben a window objektumra akármiféle változót rá lehet aggatni?
Amúgy köszi minden választ! Így, az iménti kérdésen kívül már értem.