Ciao volevo sapere a cosa serve dichiarare delle funzioni anonime dentro delle parentesi in questo modo:
Qual'è lo scopo e l'utilità di questo costrutto?Codice PHP:
(function(){
...
})()
Ciao volevo sapere a cosa serve dichiarare delle funzioni anonime dentro delle parentesi in questo modo:
Qual'è lo scopo e l'utilità di questo costrutto?Codice PHP:
(function(){
...
})()
a volte se so che la funzione mi serve una volta la dichiaro senza nome....però son curioso di capire dove hai trovato questa struttura
No ai layout tabellari!
Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872
se scrivi
var pippo = "pluto";
pippo sarà una variabile globale (window.pippo) e sovrascriverà la precedente
mentre se scrivi
(function(){
var pippo = "pluto";
})();
pippo sarà una variabile temporanea privata (salvo riferimenti di scope innestato)
l'utilizzo di funzioni anonime è largamente utilizzato per avere uno scope privato, fare un pò quello che si vuole senza preoccuparsi di andare a modificare altro.
Allo stesso tempo ti permette di svolgere operazioni senza sprecare memoria e nomi per una funzione dedicata
var testMe = (function(s){s = s.split("");for(var i = 0; i < s.length; i++)s[i]=s[i].charCodeAt(0);return s.join(".")})(someString);
In molte librerie invece serve a non sovrascrivere funzioni, nomi, metodi altrui, in altri casi, intervalli, si usano per wrappare informazioni
for(var i = 0; i < 5; i++)
setTimeout((function(i, delay){
return function(){alert('timeout numero ' + i + ' fatto dopo ' + delay + ' millisecondi')}
})(i, i * 1000), i * 1000);
In quasi tutti i decompressori l'uso della funzione è indispensabile per evitare di creare qualunque cosa a livello globale e passare senza problemi da uno a N parametri
eval((function(k,l){return ... })("a.b.key.value".split(""), "04aw-2"));
altro? .... uhm, sono utili anche per delegare codice o aggiungere caratteristiche ...
puoi usare questo costrutto 1000 volte ed avrai a cascata tutte e 1000 le chiamatecodice:window.onload = (function(oldFunction){ if(oldFunction) oldFunction(); alert("nuova funzione"); })(window.onload);
![]()
@andrea
![]()
![]()
![]()
![]()
Without faith, nothing is possible. With it, nothing is impossible
http://ilwebdifabio.it
azz, mi sono accorto ora che c'è poco da sbavare, ho sbagliato l'ultimo esempioOriginariamente inviato da whisher
@andrea
![]()
![]()
![]()
ecco, ora magari funzionacodice:window.onload = (function(oldFunction){return function(){ if(oldFunction) oldFunction(); alert("nuova funzione"); }})(window.onload);![]()
![]()
grazie di questa perla tecnica!![]()
C'è differenza tra dichiarare una funzione anonima tra ( ) da lanciare runtime e una funzione anonima equivalente senza ( )
Caso #1
Caso #2Codice PHP:
x=1;
(function(x){
y=x+1;
return y;
})(x);
Codice PHP:
x=1;
function(x){
y=x+1;
return y;
}(x);
Cosa cambia tra i due casi (parentesi a parte)?
Originariamente inviato da SPiNALeX
grazie di questa perla tecnica!![]()
C'è differenza tra dichiarare una funzione anonima tra ( ) da lanciare runtime e una funzione anonima equivalente senza ( )
Caso #1
Caso #2Codice PHP:
x=1;
(function(x){
y=x+1;
return y;
})(x);
Codice PHP:
x=1;
function(x){
y=x+1;
return y;
}(x);
Cosa cambia tra i due casi (parentesi a parte)?
Codice PHP:
alert(function(){var pippo = "pluto";return pippo;});
alert((function(){var pippo = "pluto";return pippo;})());
![]()
@andr3a
Mi ero fermato qui
causa mal di testaCodice PHP:
eval((function(k,l){return ... })("a.b.key.value".split(""), "04aw-2"));
![]()
Without faith, nothing is possible. With it, nothing is impossible
http://ilwebdifabio.it
Nell'esempio:
OK, ma seCodice PHP:
alert(function(){var pippo = "pluto";return pippo;});
alert((function(){var pippo = "pluto";return pippo;})());
cosa cambia nel mettere o non mettere le () intorno alla funzione?Codice PHP:
alert(function(){var pippo = "pluto";return pippo;}());
alert((function(){var pippo = "pluto";return pippo;})());
In parole spicciole serve perchè sennò non funziona; un esempio simile è quando vuoi convertire un numero a stringa:
1.toString() //Non funziona
(1).toString() //Funziona
beh, diciamo che spesso funziona lostesso nel caso delle funzioni ma che per maggior sicurezza (e logica) è sempre meglio usare una tonda in piùOriginariamente inviato da Mega69
In parole spicciole serve perchè sennò non funziona; un esempio simile è quando vuoi convertire un numero a stringa:
1.toString() //Non funziona
(1).toString() //Funziona![]()