Newsgroup: it.comp.lang.javascript
Titolo: setTimeout con function(){}

Ciao.
Qc mi spiega perchè in questo caso bisogna usare questa
sintassi ?
<script language="JavaScript" type="text/JavaScript">
function a() {
    function b() {
          alert('sono b ;)');
        setTimeout(function() { b(); },1000);
    }
    b();
}
a();
</script>
;)

 a();
Questa è la "fiera delle closure"; che messa così non ha affatto alcun
senso. Suppongo sia a scopo didattico, ma non capisco allora il "caso"
a cui ti riferisci.
Inoltre non vedo motivo di creare una seconda closure:
function a(){
	function b(){
		alert("sono b ;)");
		setTimeout(b, 1000);
	}
	b();
}
a();
-- 
~ Always remember you're unique, just like everyone else.


Sembrerebbe che la funzione b() esista gia' e per ragioni sconosciute non
si è potuto fare a meno di ridefinirla mantenendone il nome e con
l'appoggio di un'altra funzione è fatta richiamare ricorsivamente...
mi sfugge l'effettiva comodita' o convenienza, a parte che sarebbe meglio:
function b()
{
	alert( 'sono b' );
}
function a()
{
	function b()
	{
		alert( 'sono b in a ' );
	}
	setInterval( function(){b();}, 1000 );
}
b();
a();
boh, aspettiamo gli altri...

 Sembrerebbe che la funzione b() esista gia' 
In base a cosa?
-- 
~ "Solo i morti hanno visto la fine della guerra."
(Platone)

 In base a cosa?
Ad una mia modestissima supposizione, forse didatticamente si è cercato di
spiegare e di far vedere i differenti comportamenti che si possono avere
function b()
{
	alert( 'sono b' );
}
function a()
{
	function b()
	{
		alert( 'sono b in a ' );
	}
	setInterval( function(){b();}, 1000 );
}
function c()
{
	setInterval( function(){b();}, 1000 );
}
function d()
{
	b();
}
a();
b();
c();
d();

a cui ti riferisci.
Si è a scopo didattico perchè una cosa del genere
non funziona
function a(){
        function b(){
                alert("sono b ;)");
                setTimeout("b()", 1000);
        }
        b();
}
a();
e invece quella di Zero si
function a(){
        function b(){
                alert("sono b ;)");
                setTimeout(b, 1000);
        }
        b();
}
a();
che differenza c'è ?
Con queste closure faccio un po di confusione :(
qc links o magari qc chiarimento sarebbero molto graditi.
Riguardo al caso pensa di dover fare apparire
 un messaggio all'user per una azione andata a buon fine
(metti un inserimento fatto con una httpRequest) e poi farlo sparire.
Ciao.

 (metti un inserimento fatto con una httpRequest) e poi farlo sparire.
Beh, ci sono diversi modi per ottenere questa cosa, e non in tutti si
devono usare necessariamente le closure. Va anche visto il contesto.
-- 
~ "L'arte non riproduce cio' che e' visibile,ma rende visibile cio'
che non  sempre lo e'" (Paul Klee)

 forse didatticamente si è cercato
[..]
Hai praticamente riscritto tutto ex-novo :)
-- 
~ L'intelligenza artificiale non può battere la stupidità naturale.
(Lemma di Sullivan)

 Hai praticamente riscritto tutto ex-novo :)
:P

 chissa' perche' mi ero fatta quel'idea
Eh, ed era quello che volevo capire :) più per curiosità che per
altro; per seguire il processo mentale che avevi fatto.
-- 
~ "Accadono cose che sono come domande.
Passa un minuto, oppure anni e poi la vita risponde." (A. Baricco)