Dichiarare ed eseguire funzioni anonime
26 Luglio 2007
Se avete una profonda conoscenza di javascript, o avete lavorato con qualche framework javascript, vi sarete sicuramente imbattuti nelle funzioni anonime, che tornano molto utili quando si realizza un bookmarklet, quando si vuole realizzare codice non intrusivo, quando si ha a che fare con Ajax. Cosa sono? Vediamo un esempio. Realizziamo un link che apra Google in una nuova finestra, ma immaginiamo di poter usare solo “href”.
ESEMPIO 1
<a href=”javascript:window.open(’http://www.google.it’,'_blank’);”>Apri Google Italia</a>
COMMENTO 1
L’esempio 1 non funziona bene: apre la nuova pagina correttamente, ma la pagina “madre” viene sostituita dalla scritta “[object]“. Questo perchè la funzione window.open() restituisce un oggetto corrispondente alla finestra aperta e lo assegna all’href del link.
ESEMPIO 2
<script>
function apriGoogleIt(){
window.open(’http://www.google.it’,'_blank’);
}
</script>
<a href=”javascript:apriGoogleIt();”>Apri Google Italia</a>
COMMENTO 2
L’esempio 2 funziona. L’istruzione window.open() restituisce sempre il solito oggetto, ma stavolta non può assegnarlo a nessuno. Ma se la funzione apriGoogleIt esistesse già? Si può usare una funzione anonima, che non necessita cioè del nome “apriGoogleIt”.
ESEMPIO 3
<a href=”javascript:function(){window.open(’http://www.google.it’,'_blank’)}”>Apri Google Italia</a>
COMMENTO 3
L’esempio 3 non funziona: viene correttamente dichiarata una funzione anonima (è sparito il nome “apriGoogleIt”), ma non viene ancora eseguita.
ESEMPIO 4
<a href=”javascript:(function(){window.open(’http://www.google.it’,'_blank’)})()”>Apri Google Italia</a>
COMMENTO 4
L’esempio 4 funziona. Il trucco è dichiarare la funzione tra parentesi tonde, aggiungendo alla fine una parentesi aperta e una chiusa.
Entry Filed under: Bookmarklets, JavaScript. .

Trackback this post | Subscribe to the comments via RSS Feed