2010-01-29 16 views
7

Io uso solo jQuery per scrivere codice JavaScript. Una cosa che mi confonde è che questi due approcci di funzioni di scrittura,Qual è la differenza tra queste due funzioni/approcci?

Primo approccio

vote = function (action,feedbackId,responseDiv) 
{ 
    alert('hi'); 
    return feedbackId; 
} 

Secondo approccio

function vote(action, feedbackId,responseDiv) 
{ 
    alert('hi'); 
    return feedbackId; 
} 

Qual è la differenza tra i due e perché dovrebbe uno utilizzare il primo approccio o il secondo approccio?

+3

A meno che 'vote' è già stato dichiarato,' voto = function (azione, feed ... 'dovrebbe essere' var vote = function (action, feed ... '-è una cattiva pratica usare le global implicite –

+1

possibile duplicato di [JavaScript: var functionName = function() {} vs function functionName() {}] (http://stackoverflow.com/questions/336859/javascript-var-functionname-function-vs-function-functionname) –

risposta

8

Il primo è un'espressione funzione assegnato alla variabile vote, il secondo è una dichiarazione funzione.

La differenza principale è che le istruzioni di funzione vengono valutate in fase di analisi, sono disponibili prima della la relativa dichiarazione in fase di esecuzione.

Consulta anche:

+0

Grazie CMS:) :) –

+0

Il primo link è morto. –

+0

@PlatinumAzure, grazie ho aggiornato il link all'articolo. – CMS

0

Il primo è un'espressione di funzione,

var calculateSum = function(a, b) { return a + b; } 

alert(calculateSum(5, 5)); // Alerts 10 

La seconda è una dichiarazione di funzione normale.

6
function myFunction() {} 

... si chiama "dichiarazione di funzione".

var myFunction = function() {}; 

... è chiamato "espressione di funzione".

Sono molto simili; tuttavia:

  • La dichiarazione di funzione può essere dichiarata dopo si fa riferimento, mentre l'espressione funzione deve essere dichiarata prima che viene fatto riferimento:

    // OK 
    myFunction(); 
    function myFunction() {} 
    
    // Error 
    myFunction(); 
    var myFunction = function() {}; 
    
  • Dal un'espressione di funzione è una dichiarazione, dovrebbe essere seguito da un punto e virgola.

Vedi Function constructor vs. function declaration vs. function expression al Mozilla Developer Centre per ulteriori informazioni.

0

La sintassi della dichiarazione di funzione non può essere utilizzata all'interno di un'istruzione di blocco.

legale:

function a() { 
    function b() { 

    } 
} 

illegale:

function a() { 
    if (c) { 
     function b() { 

     } 
    } 
} 

Si può fare questo però:

function a() { 
    var b; 
    if (c) { 
     b = function() { 

     }; 
    } 
} 
Problemi correlati