2010-01-29 11 views
7

Ich benutze nur jQuery zum Schreiben von JavaScript-Code. Eine Sache, die mich verwirrt, ist diese beiden Ansätze von Schreibfunktionen,Was ist der Unterschied zwischen diesen beiden Funktionen/Ansätzen?

Erster Ansatz

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

Zweiter Ansatz

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

Was ist der Unterschied zwischen den beiden und warum sollte man Verwenden Sie den ersten Ansatz oder den zweiten Ansatz?

+3

Es sei denn, 'vote' wurde bereits deklariert,' Abstimmung = function (Action, feed ... 'sollte' var vote = function (action, feed ... 'sein - es ist eine schlechte Übung, implizierte Globals zu verwenden. –

+1

mögliches Duplikat von [JavaScript: var Funktionsname = Funktion() {} vs Funktion Funktionsname() {}] (http://stackoverflow.com/questions/336859/javascript-var-functionname-function-vs-function-functionname) –

Antwort

8

Das erste ist ein Funktionsausdruck auf die Variable vote zugeordnet, die zweite ist eine Funktionsdeklaration.

Der Hauptunterschied besteht darin, dass Funktionsanweisungen zum Zeitpunkt der Analyse ausgewertet werden. Sie sind verfügbar vor ihre Deklaration zur Laufzeit. auch

Siehe:

+0

Danke CMS:) :) –

+0

Der erste Link ist tot. –

+0

@PlatinumAzure, danke Ich habe den Link zum Artikel aktualisiert. – CMS

0

Der erste ist ein Funktionsausdruck,

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

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

Die zweite Funktion eine einfache Erklärung.

6
function myFunction() {} 

... ist eine "Funktionsdeklaration" genannt.

var myFunction = function() {}; 

... ist ein "Funktionsausdruck" bezeichnet.

Sie sind sehr ähnlich; aber:

  • Die Funktionsdeklaration nach erklärt werden kann, wird Bezug genommen wird, während der Funktionsausdruck deklariert werden muss, bevor sie referenziert wird:

    // OK 
    myFunction(); 
    function myFunction() {} 
    
    // Error 
    myFunction(); 
    var myFunction = function() {}; 
    
  • Da ein Funktionsausdruck ist eine Aussage, Es sollte ein Semikolon folgen.

Siehe Function constructor vs. function declaration vs. function expression am Mozilla Developer Centre für weitere Informationen.

0

Die Syntax der Funktionsdeklaration kann nicht innerhalb einer Blockanweisung verwendet werden.

Legal:

function a() { 
    function b() { 

    } 
} 

Illegal:

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

     } 
    } 
} 

Sie dies allerdings tun können:

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

     }; 
    } 
} 
Verwandte Themen