2010-01-29 24 views
7

Uso solo jQuery para escribir código JavaScript. Una cosa que me confunde es estos dos enfoques de la escritura de funciones,¿Cuál es la diferencia entre estas dos funciones/enfoques?

Primera aproximación

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

segundo enfoque

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

¿Cuál es la diferencia entre los dos y por qué debe uno usar el primer enfoque o el segundo enfoque?

+3

A menos que 'vote' ya se ha declarado,' voto = función (acción, feed ... 'debe ser' var vote = function (action, feed ... '-es una mala práctica usar globals implícitos. –

+1

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

Respuesta

8

La primera es una expresión función asignada a la variable vote, la segunda es una declaración función.

La diferencia principal es que las sentencias de función se evalúan en tiempo de análisis, están disponibles antes de su declaración en tiempo de ejecución.

Consulte también:

+0

Gracias CMS:) :) –

+0

El primer enlace está muerto. –

+0

@PlatinumAzure, gracias, he actualizado el enlace al artículo. – CMS

0

La primera es una expresión de función,

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

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

La segunda es una declaración de la función normal.

6
function myFunction() {} 

... se llama una "declaración de la función".

var myFunction = function() {}; 

... se denomina "expresión de función".

Son muy similares; Sin embargo:

  • La declaración de la función se puede declarar después que se hace referencia, mientras que la expresión de la función debe ser declarada antes de que se hace referencia:

    // OK 
    myFunction(); 
    function myFunction() {} 
    
    // Error 
    myFunction(); 
    var myFunction = function() {}; 
    
  • Desde una expresión de función es una declaración, debe ser seguido por un punto y coma.

Ver Function constructor vs. function declaration vs. function expression en el Mozilla Developer Centre para más información.

0

La sintaxis de declaración de función no se puede utilizar dentro de una instrucción de bloque.

legal:

function a() { 
    function b() { 

    } 
} 

ilegal:

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

     } 
    } 
} 

Puede hacer esto sin embargo:

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

     }; 
    } 
} 
Cuestiones relacionadas