Newsgroup: it.comp.lang.javascript
Titolo: sulle variabili globali...

Ciao a tutti!
Ho un quesito da porvi...in pratica stavo leggendo un po' di articoli di 
html.it
 quando ho visto la seguente pagina
http://javascript.html.it/guide/lezione/818/manipolare-la-struttura-del-documento/
in pratica non capisco perchè la variabile immagine e frase vengono 
considerate globali nonostante siano state dichiarate all'interno di una 
funzione...
Grazie 1000 per l'aiuto!
Enrico

 funzione...
Dichiarare una variabile significa fare:
	var myvar="somevalue";
Se all'interno di una funzione non viene usato il var, ma viene usata
direttamente la variabili, questa ha scope globale:
	function f(){
		pippo = "hello";
	}
	alert(typeof pippo)
	f();
	alert(typeof pippo);
Comunque è buona pratica quella di dichiarare sempre le variabili, in
questo modo scrivi codice leggibile e più facile da manutenere.
-- 
~ Se i sintomi persistono, insultare il medico.

 
Sei stato chiarissimo, grazie 1000!
Ti chiedo ancora una cosa, l'uso di this nell'esempio di 
html.it
 era 
necessario? A che oggetto si riferisce in tal caso?
Grazie 1000
Enrico

 A che oggetto si riferisce in tal caso?
Tutte le variabili e funzioni "globali", sono figlie dell'oggetto
window, che è implicito. Ad esempio:
	function myfun(){
		// do something;
	}
	myfun();
	window.myfun();
Le due chiamate sono del tutto equivalenti.
E visto che "this", si riferisce all'oggetto a cui è associato il
metodo/proprietà, in quel caso si riferisce proprio a window.
In sostanza, verifica che la variabile globale creata all'interno
di un'altra funzione, esista e abbia un valore che sia una verità
logica (in quanto la variabile è vista come proprietà di window):
http://groups.google.com/group/it.comp.lang.javascript/browse_thread/thread/c71f71b0732438ff/e083819a4bc5bb5d?lnk=st&q=falsit%C3%A0+logica+author%3Azer0&rnum=2#e083819a4bc5bb5d
(in realtà il post parla di falsità logica ma è la medesima cosa,
ovviamente invertita)
In quel frangente comunque avrebbero potuto fare qualcosa un poco
più mirato, come:
	if ( typeof frase != "undefined" ){
		// etc


 ~ Se i sintomi persistono, insultare il medico.
Senti, a me 'sta firma fa ridere ogni volta che la leggo :)
-- 
Nando [?]
Apostolo della Prova

 logica (in quanto la variabile è vista come proprietà di window):
Sei stato precisissimo :)
Quindi in questo caso potevano anche evitare l'utilizzo di this visto 
che il riferimento a windows è sottinteso...è corretto?
Ciao e grazie 1000
Enrico

 che il riferimento a windows è sottinteso...è corretto?
Si, se utilizzavi il typeof come ti ho mostrato nell'esempio. Ma se mi
chiedi se potevano fare qualcosa tipo:
	if ( frase ){}
Al posto di:
	if ( this.frase ){}
	/* o l'equivalente */
	if ( window.frase ){}
La risposta è no. Perché "frase" non è stata dichiarata; se al momento
dell'esecuzione di quell'if non esiste ancora, ottieni un errore.
Errore che eviti se nell'if la consideri una proprietà di window; o se
usi il typeof.
-- 
~ Io ho una filosofia semplice:
Riempi ciò che è vuoto. Vuota ciò che è pieno. Gratta ciò che prude.
(A. R. Longworth)

 Senti, a me 'sta firma fa ridere ogni volta che la leggo :)
Anche a me fece ridere, per questo la tengo come signature, a casa. :)
Tra l'altro, in fondo, non è neppure troppo falsa...
-- 
~ "Sono diventato un medico per le stesse ragioni di tutti:
Donne, soldi, potere, e donne." (Dr. Cox)