esattamente, infatti facendo alcune prove è proprio così.
Quello che mi chiedo tuttavia è, questo modo di inizializzare la funzione per generare la clousure
(function(par) { })(par)
è stata creata appositamente dagli ingegneri javascript, oppure è un semplice escamotage ricavato su quel già di buono offrono i metodi standard del linguaggio?
Ho creato un codice più semplice da capire
Ora a ben vedere function(i){return function(){prova(i)}}(i) potrebbe essere visto in questo modo:Codice PHP:
<div id="uno">uno</div>
<div id="due">due</div>
<div id="tre">tre</div>
<script>
function prova(a)
{alert(a)}
for (var i=1; i<4; i++)
{
if (i==1)
{
$('#uno').bind("click", function(){prova(i)} ) //restituisce 4 che è il valore che la variabile globale i ha assunto alla fine del ciclo
}
else if (i==2)
{
$('#due').bind("click", function(i){return function(){prova(i)}}(i) ) //restituisce correttamente 2 in quanto genero una clousure con la variabile i
}
else if (i==3)
{
$('#tre').bind("click", function(i){return function(){prova(i)}}(i) ) //restituisce correttamente 3 in quanto genero una clousure con la variabile i
}
}
</script>
la prima function anonima genera (ritorna) un'ulteriore function anonima, seguita poi da ulteriori parentesi tonde con incluso un argomento.
ciò che ne risulta a conti fatti è la dichiarazione di una funzione
function(i) {prova(i)}
Se così fosse, è appunto questo che intendo per escamtoage