2012-02-06 7 views
5

Duplicar posible: What is the difference between a function expression vs declaration in JavaScript? This JavaScript syntax I haven't seen till now, what does it do really?Función de JavaScript de sintaxis diferente?

¿Cuál es la diferencia entre las dos formas siguientes de escribir una función? He visto ambos usados, pero no estoy seguro de cuál es 'correcto'.

function init() { 

} 


init: function() { 

}, 

¿Y cuáles son las ventajas de escribirlo de la segunda manera?

+0

Además. El segundo ni siquiera es sintácticamente válido en este contexto. – Tomalak

+2

@Tomalak: No, la sintaxis de la función literal del objeto no se discute en su pregunta vinculada. No es un duplicado en absoluto. –

+0

@ Platinum: el segundo es una expresión de función. El literal del objeto (aquí falta) no lo convierte en otra cosa. – Tomalak

Respuesta

4

declaración de la función

function init() { 

} 

expresión de función

var init = function() { 

}; 

Las principales diferencias tienen que ver con Variable Hoisting en JavaScript. Puede leer más aquí: http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting y http://javascriptweblog.wordpress.com/2010/07/06/function-declarations-vs-function-expressions/

En su ejemplo, creo que también está interesado en definir anonymous functions en object literals. Aquí está un ejemplo:

//obj is the object name 
var obj = { 
    //init is the property name or key and the anonymous function is the value 
    init: function() { 
    }, 
    anotherProp: 'some value' 
}; 

Esto se usaría como tan:

obj.init(); 
alert(obj.anotherPorp); 

En literales de objetos diferentes propiedades del objeto se definen con una sintaxis key: value y utilizan comas para separarlos.

Recomiendo pasar por esta serie gratuita en JavaScript http://learn.appendto.com/lessons, responderá a muchas de estas preguntas para usted y le dará una base sólida para convertirse en un desarrollador de JS.

0

Trate de utilizar siempre:

init: function(){ 

} 

al escribir un objeto literal.

Cuando usted está tratando de procesar una función global configurarlo como un var lugar, por lo que:

var init = function(){ 

} 

Recuerde, cada uno tiene su lugar, pero personalmente me he vuelto aficionado a escribir un espacio de nombres para el proyecto en el que estoy trabajando y usando un objeto literal.

Ahora, ambos solo estarán disponibles en el objeto tan pronto como se establezca el objeto. El otro método es un poco más descuidado y menos utilizado ahora, pero se puede llamar sin importar el orden de las operaciones, por lo que se puede llamar antes o después de que se establezca en el código ... Nuevamente, esto se está abandonando en muchos casos .

function init(){ 

} 
0

El segundo uno sólo puede usarse en el contexto de un objeto literal:

var myNamespace = { 
    func1: function() { 
     // do something 
    }, 

    func2: function() { 
     // do something else 
    }, 

    someValue = 5 
}; 

La primera forma se ejecuta como un comunicado.Es equivalente a:

var init = function() { 
    // do something 
}; 
0

El primer ejemplo define una función en el ámbito global que puede ser llamado con init(). El segundo define una propiedad de un objeto llamado init que es la declaración de la función a la derecha.

En general, el segundo ejemplo proporciona un ámbito más pequeño en el que puede ejecutar la función.

Primer ejemplo le permite llamar a la función de este modo:

init();

Y el segundo, más probable es que esto:

var thing = function() { 
    init: function() { } 
}; 

thing.init(); 
Cuestiones relacionadas