Pagina 1 di 5 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 50

Discussione: (function(){})() ???

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    209

    (function(){})() ???

    Ciao volevo sapere a cosa serve dichiarare delle funzioni anonime dentro delle parentesi in questo modo:
    Codice PHP:
    (function(){
        ...
    })() 
    Qual'è lo scopo e l'utilità di questo costrutto?

  2. #2
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    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

  3. #3
    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 ...

    codice:
    window.onload = (function(oldFunction){
    	if(oldFunction)
    		oldFunction();
    	alert("nuova funzione");
    })(window.onload);
    puoi usare questo costrutto 1000 volte ed avrai a cascata tutte e 1000 le chiamate


    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  4. #4

    [OT]

    @andrea






    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  5. #5

    Re: [OT]

    Originariamente inviato da whisher
    @andrea

    azz, mi sono accorto ora che c'è poco da sbavare, ho sbagliato l'ultimo esempio


    codice:
    window.onload = (function(oldFunction){return function(){
    	if(oldFunction)
    		oldFunction();
    	alert("nuova funzione");
    }})(window.onload);
    ecco, ora magari funziona

    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    209
    grazie di questa perla tecnica!
    C'è differenza tra dichiarare una funzione anonima tra ( ) da lanciare runtime e una funzione anonima equivalente senza ( )

    Caso #1
    Codice PHP:
    x=1;
    (function(
    x){
    y=x+1;
    return 
    y;
    })(
    x); 
    Caso #2
    Codice PHP:
    x=1;
    function(
    x){
    y=x+1;
    return 
    y;
    }(
    x); 

    Cosa cambia tra i due casi (parentesi a parte )?

  7. #7
    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
    Codice PHP:
    x=1;
    (function(
    x){
    y=x+1;
    return 
    y;
    })(
    x); 
    Caso #2
    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
    Codice PHP:
    eval((function(k,l){return ... })("a.b.key.value".split(""), "04aw-2")); 
    causa mal di testa
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    209
    Nell'esempio:

    Codice PHP:
    alert(function(){var pippo "pluto";return pippo;});
    alert((function(){var pippo "pluto";return pippo;})()); 
    OK, ma se

    Codice 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?

  9. #9
    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

  10. #10
    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
    beh, diciamo che spesso funziona lostesso nel caso delle funzioni ma che per maggior sicurezza (e logica) è sempre meglio usare una tonda in più
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.