Dichiarare ed eseguire funzioni anonime

26 luglio 2007 at 14:31 1 commento

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&#8217;,’_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&#8217;,’_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&#8217;,’_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&#8217;,’_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.

IE: onresize problem Links, onclick e void(0)

1 commento Add your own

  • 1. bello  |  6 luglio 2011 alle 13:41

    interessante, mi era capitata una cosa simile e ho dovuto per la mia ignoranza creare funzioni su funzioni
    quando bastava
    javascript:(function(){ alert(“ciao”) })()”

    Rispondi

Scrivi una risposta a bello Cancella risposta

Trackback this post  |  Subscribe to the comments via RSS Feed


Categorie

JavaScript String .replace

Archivi