2015-07-16 16 views
9

Attualmente sto lavorando tramite le applicazioni Web della singola pagina di Mikowski e Powell. Dopo aver lavorato con il semplice tutorial del Capitolo 1, sono confuso sul motivo per cui è necessario a return true e return false nelle funzioni toggleSlider(), onClickSlider() e initModule().Perché restituire vero o falso dalle funzioni?

Qual è il vantaggio aggiunto di farlo? Quando ho eseguito il codice seguente senza il return true e return false, ha funzionato esattamente come con le dichiarazioni di ritorno.

Qual è una situazione appropriata per la quale queste dichiarazioni di reso sono effettivamente utili e necessarie?

var spa = (function($) { 
    var configMap = { 
     extended_height: 434, 
     extended_title: 'Click to retract', 
     retracted_height: 16, 
     retracted_title: 'Click to extend', 
     template_html: '<div class="spa-slider"><\/div>' 
    }, 
    $chatSlider, 
    toggleSlider, onClickSlider, initModule; 

    toggleSlider = function() { 
    var slider_height = $chatSlider.height(); 

    if (slider_height === configMap.retracted_height) { 

     $chatSlider 
     .animate({ 
      height: configMap.extended_height 
     }) 
     .attr('title', configMap.extended_title); 
     return true; 

    } else if (slider_height === configMap.extended_height) { 
     $chatSlider 
     .animate({ 
      height: configMap.retracted_height 
     }) 
     .attr('title', configMap.retracted_title); 
     return true; 

    } 

    console.log("Nothing to extend or retract. No events fired."); 
    return false; 
    }; 

    onClickSlider = function(event) { 
    console.log("Calling onClickSlider click event"); 
    toggleSlider(); 
    return false; 
    }; 

    initModule = function($container) { 
    $container.html(configMap.template_html); 

    $chatSlider = $container.find('.spa-slider'); 

    $chatSlider 
     .attr('title', configMap.retracted_title) 
     .click(onClickSlider); 

    return true; 
    }; 

    return { 
    initModule: initModule 
    }; 

}(jQuery)); 

jQuery(document).ready(
    function() { 
    spa.initModule(jQuery('#spa')); 
    } 
); 

body { 
    width: 100%; 
    height: 100%; 
    overflow: hidden; 
    background-color: #777; 
} 
#spa { 
    position: absolute; 
    top: 8px; 
    left: 8px; 
    bottom: 8px; 
    right: 8px; 
    border-radius: 8px 8px 0 8px; 
    background-color: #fff; 
} 
.spa-slider { 
    position: absolute; 
    bottom: 0; 
    right: 2px; 
    width: 300px; 
    height: 16px; 
    cursor: pointer; 
    border-radius: 8px 0 0 0; 
    background-color: #f00; 
} 

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
    <div id="spa"> 
     <div class="spa-slider"></div> 
    </div> 
</script> 
+0

Per quanto posso dire, questi valori di ritorno non hanno alcuno scopo. Sospetto che sia solo lo stile personale dell'autore, gli piace avere valori di ritorno espliciti. 'toggleSlider' usa il valore di ritorno per indicare se ha fatto qualcosa, che potrebbe essere utile per il debug nella console, sebbene usi anche' console.log() 'per lo stesso scopo. – Barmar

+0

@nhgrif Mi scuso. Ritiro il mio riferimento alla revisione del codice. Il mio punto tuttavia è che questo non sembra essere in discussione qui, in quanto non si tratta di un particolare problema per il quale il poster ha difficoltà a trovare una soluzione. – Claies

+0

@Claies Quindi suggerisco di trovare una motivazione ravvicinata e di votarla, e magari di svenderla? Sei certo che questa domanda è fuori tema per SO, ma ha zero downvotes e zero voti ravvicinati. Per me, questa domanda sembra perfettamente adatta per SO, davvero. – nhgrif

risposta

6

Spesso, nei gestori di eventi, di ritorno falso è un modo per dire l'evento a fuoco non in realtà. Quindi, ad esempio, in caso di trasmissione, ciò significherebbe che il modulo non viene inviato.

Nell'esempio return true; si verificherà l'animazione, mentre return false; no.

In alternativa, è possibile eseguire e.preventdefault() anziché return false;.

+1

Ma la maggior parte di queste funzioni non sono gestori di eventi. – Barmar

+0

Ciao Nicola, grazie per la risposta. Questo chiarisce le mie preoccupazioni. Migliore! – abmantha

4

I valori restituiti come questo nelle funzioni Javascript sono spesso utilizzati per indicare il successo o l'insuccesso. È possibile creare una semplice struttura di controllo di flusso facendo qualcosa di simile:

var doSomething = function() { 
    if (error) { 
     return false; 
    } else { 
     return true; 
    } 
}; 

if (doSomething()) { 
    doSomethingElse(); 
} else { 
    console.log("There was an error!"); 
} 

Detto questo, è raramente una buona idea di utilizzare questo per qualcosa di diverso da un demo veloce. return false è noto per la produzione di risultati imprevisti quando viene utilizzato esclusivamente in questo modo: c'è quasi sempre un'opzione migliore per raggiungere il tuo obiettivo (a meno che il tuo obiettivo non restituisca un valore booleano!). Se hai solo bisogno di uscire da una funzione attiva, puoi semplicemente usare return;.

Nel codice specifico, toggleSlider() sembra essere il ritorno di questi valori per indicare l'attività, mentre onClickSlider() sta usando return false al posto di e.preventDefault(), come Nicholas menzionato nella loro risposta. Puoi leggere di più sul perché questa è spesso una cattiva idea qui: http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/

+0

Grande riferimento all'articolo. Grazie mille. Migliore! – abmantha

-1

Mi sembra che tu stia cercando una regola hard-set in cui non ce ne sia davvero una.

Si chiede "Perché" questa regola esiste quando in realtà non lo è.

stai ancora leggendo capitolo 1 di Mikowski e Powell di singola pagina Applicazioni Web e io sono molto felice che ottengono di pensare e di notare valore restituito la vostra funzione.

Ci sono molti valori restituiti possibili - true e false sono solo due opzioni molto comuni e molto importanti.

In funzioni più avanzate si potrebbe trovare se stessi tornando self o un object di un numero qualsiasi di valore di ritorno diverso di - tutto secondo l'architettura dell'applicazione e quello che vi serve.

Ad esempio, in Programmazione orientata agli oggetti, sta diventando sempre più comune restituire self per le funzioni semplici. Questo ti permette di concatenare diverse funzioni in una riga ... ma cosa ha a che fare la programmazione orientata agli oggetti con il capitolo 1?

Ti consiglio di concederti più tempo ed esperienza. Per ora, ti suggerirei di fidarti del processo. Mikowski e Powell stanno facendo del loro meglio per darti un sacco di informazioni ... ma devono dividerlo in piccoli pezzi e morsi.

Buona fortuna!

+2

Downvote perché questo non è in alcun modo un tentativo di rispondere alla domanda. Comunque è un bel sentimento! Forse lasciare un commento incoraggiante, invece? – Alex

+1

Ciao Alex, grazie per il tuo feedback. Tuttavia, questo risponde alla domanda affermando che la premessa della domanda è sbagliata. La domanda è "Perché X è vero" e la risposta è "X non è vero". – Myst

+0

Ciao @Alex - per favore vedi il mio commento e riconsidera. – Myst

Problemi correlati