Newsgroup: it.comp.lang.javascript
Titolo: domande sul linguaggio e sulle variabili

Ciao a tutto il gruppo, scusate se uso un linguaggio improprio, ma chiedo
aiuto a voi anche per migliorare questo, spero sarete cosě gentili da
rispondere anche su come devo chiamare le cose, cosě la prossima volta posso
spiegarmi meglio.
Nel form ho questo bottone <input type=button value="funzione"
onClick="funzione1('ciao')">
Innanzi tutto vorrei sapere come si chiama quel 'ciao', si chiama forse
argomento?
Poi ho un'altra domanda. Questa č la funzione1
  function funzione1(a) // <<-- in questo caso la (a) (che rappresenta  
//    'ciao') come si chiama? Si chiama forse parametro, variabile, o come?
   {
      alert(a) }
Se io adesso ho una funzione 2 e volessi servirmi di (a), come devo fare?
Quello che sicuramente ho capito č che (a) č utilizzabile all'interno della
funzione 1, ma al di fuori di essa non esiste piů. Vorrei sapere come fare ad
utilizzare il valore di (a) anche in un altra funzione. 
In questo modo
  function funzione2()
   {
alert(a)  }
mi dice che "a non č definita".
Grazie a tutti, ciao
--
Nicoletta

 Se io adesso ho una funzione 2 e volessi servirmi di (a), come devo fare?
se chiami la function2 da function1 lo puoi passare direttamente (da
function1: function2(a)); altrimenti devi registrarlo in una variabile
globale (cioé una variabile dichiarata al di fuori di una function, e quindi
visibile globalmente); es.
var tuavarglobale="";
function function1(a) {
 tuavarglobale=a;
 ....
}
function2() {
 alert(tuavarglobale);
}

 mi dice che "a non č definita".
Questo si chiama "Scope" delle variabili. Cioe', la vita e la visibilita' di
una variabile com'e' definita. Le variabili possono essere di tipo locale, o
globale.
Le variabili si dichiarano con "var". Ma non sempre, come vedremo piu'
avanti.
"a" non puo' essere usata all'esterno di funzione1(), perche' e' stata
dichiarata come parametro. In questo modo viene considerata "locale" alla
funzione di riferimento (cioe', "funzione1").
Le variabili locali sono accessibili al solo contesto in cui esse sono
dichiarate. Una volta "usciti" fuori dal contesto, non ci si puo' piu'
riferire ad esse. Nel nostro caso, "a" puo' essere usata fintanto che stiamo
dentro funzione1, ma nel momento in cui se ne esce, la variabile "a" termina
il suo ciclo vitale, per cosi' dire.
Le variabili globali, invece, non sono dichiarate all'interno di alcuna
funzione, eventualmente esternamente, e quindi possono essere viste da
qualsiasi funzione dello script. Il loro "ciclo vitale" termina quando
finisce quello della pagina in cui e' posta (es, quando cambi pagina).
Per essere pratici, e riassumere:
<script>
var c="Salve"; /* questa variabile e' globale. E' definita esternamente alle
funzioni*/
function myfun(a){
    var b; /* a e b sono locali */
    alert(a);
    alert(c); /* Non da errore. "c" e' globale, puo' essere usata ovunque */
}
myfun("ciao");
/* Da errore perche' siamo al di fuori della funzione */
alert(a);
alert(b);
alert(c); /* Non da errore. "c" e' globale, puo' essere usata ovunque */
</script>
Quindi il discorso e' molto semplice: Se una variabile viene dichiarata con
"var" all'interno di una funzione, e' locale, se viene dichiarate
all'esterno, e' globale.
C'e' pero' un piccolo caso particolare:
<script>
function myfun(a){
    c=a;
}
alert(c) /* Da errore, "c" non e' definita */
myfun("Salve");
alert(c) /* Non da' errore, stampa "Salve" */
</script>
Come puoi vedere, nello script non c'e' alcun "var c".. quindi giustamente
il primo alert da' errore se eseguito.. se invece lo commenti, ed esegui il
secondo, funziona. Perche'?
Perche' all'interno della funzione "myfun", noi eseguiamo "c=a".
"a" e' un parametro, e quindi e' locale. Ma "c"?
L'interprete JS, non trovando la dichiarazione di "c" nella funzione, non la
considera locale, ma globale. Quindi si puo' dire che "c" e' si' una
variabile globale che non ha dichiarazione, ma prende "vita" dalla prima
volta che viene chiamata.
Quindi, prima che venga eseguita "myfun", per l'interprete JS non esiste
alcuna variabile di nome "c". Dopo che e' stata usata per la prima volta,
invece (e questo succede all'interno della funzione) e' come se avessimo
dichiarato "var c" come globale.
Dopo questo "mattone" sullo scope delle variabili (scusa ^^" ), torniamo al
problema di fondo. Come rendere visibile "a" da funzione1 a funzione2?
Come hai potuto vedere, adesso potresti semplicemente dichiarare una
variabile globale, e quindi agire di conseguenza. Ad esempio:
<script>
    var ga;
    function funzione1(a){
        ga=a;
    }
    function funzione2(){
        alert(ga);
    }
    funzione1("ciao");
    funzione2();
</script>
oppure avere un valore di ritorno da funzione1. E questo si ottiene tramite
"return". L'istruzione "return" esce dalla funzione e restituisce un valore:
<script>
    function funzione1(a){
        alert("Sono entrato in funzione1");
        return a;
        alert("Questo alert non verra' mai visto, perche' e' dopo un return.");
    }
    function funzione2(a){
        alert(a);
    }
    var b=funzione1("ciao");
    funzione2(b);
    /* oppure: */
    funzione2(funzione1("ciao"));
</script>
Tutte le istruzioni dopo il "return" non vengono eseguite, perche' si e'
gia' al di fuori della funzione. Questo spesso torna utile, non solo per
avere un valore di ritorno da una particolare funzione, ma per interrompere
l'esecuzione di certi comandi in una funzione se una certa condizione non si
verifica, ad esempio.
Mi sono dilungato parecchio, e non sono stato chiarissimo forse, ma spero di
esserti stato d'aiuto.
--------------------------------
Inviato via 
http://usenet.libero.it

'azz che tirata!
meno male che "ma oggi sto un po' dormendo" !

 meno male che "ma oggi sto un po' dormendo" !
Ed infatti e' cosi'.. se non stessi dormendo, sarei stato piu' conciso
perche' avrei aggregato in modo piu' coerente i pensieri.. e poi per 'ste
cose ci sento.. :)
P.S.
Ho visto la tua risposta dopo che ho scritto la mia, non volermene.
Scrivendo dal portale di libero, quando vedo dei topic che mi interessano
clicco su rispondi, e incomincio a scrivere.. quindi non vedo se arrivano
altre risp o meno..


beh, la mia era una piccola intro, la tua un intero capitolo!

 esserti stato d'aiuto.
Sei stato chiarissimo e d'"aiutissimo". Ringrazio anche il gentile
Cristiano. 
Vista la vostra cortesia e disponibilità ho come la sensazione che mi
vedrete ancora ^_^  Ciao a tutti
-- 
Nicoletta