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:
  1. var x = 1;  
  2. function whatIsX() {  
  3.     alert(x); // 1  
  4. }  
js/2:
  1. var x;  
  2. function setX(value) {  
  3.     x = value;  
  4. }  
  5.   
  6. setX(1);  
  7. alert(x); // 1  
ajánlott cikk: http://weblabor.hu/cikkek/oojsafelszinfolott

php/2:
  1. function makeAGlobalVariable($name$value) {  
  2.     $GLOBALS[$name] = 1;  
  3. }  
  4.   
  5. makeAGlobalVariable('x', 1);  
  6. 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:
  1. window.akarmik = 8;  
  2.   
  3. function addAkarmi() {  
  4.      window.akarmik++;  
  5. }  
  6.   
  7. alert(window.akarmi);  
  8. addAkarmi();  
  9. 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:
  1. function egyFunkcio() {  
  2.     meddig = 8;  
  3.     for (i=0; i<meddig; i++) {  
  4.         document.write(i);  
  5.     }  
  6. }  
... 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:
  1. function egyFunkcio() {  
  2.     var meddig = 8;  
  3.     var i;  
  4.     for (i=0; i<meddig; i++) {  
  5.         document.write(i);  
  6.     }  
  7. }  
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:
  1. function valtoztat($elso$masodik$osszeg) {  
  2.     $osszeg = $elso + $masodik;  
  3. }  
  4.   
  5. $e = 1;  
  6. $m = 3;  
  7. $o = 0;  
  8. valzotat ($e$m$o);  
  9.   
  10. echo ($o);    // az eredmeny 0  
... cím szerintinél viszont ez a helyzet (különbség az & jel a $osszeg elött):
  1. function valtoztat($elso$masodik, &$osszeg) {  
  2.     $osszeg = $elso + $masodik;  
  3. }  
  4.   
  5. $e = 1;  
  6. $m = 3;  
  7. $o = 0;  
  8. valzotat ($e$m$o);  
  9.   
  10. 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.