2012-02-06 11 views
5

Eventuali duplicati: 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?Funzione JavaScript sintassi diversa?

Qual è la differenza tra i due modi di scrivere una funzione? Ho visto entrambi utilizzati, ma non sono sicuro quale sia 'corretto'.

function init() { 

} 


init: function() { 

}, 

E quali sono i vantaggi di scriverlo il secondo modo?

+0

Oltre. Il secondo non è nemmeno sintatticamente valido in questo contesto. – Tomalak

+2

@Tomalak: No, la sintassi della funzione letterale dell'oggetto non viene discussa nella domanda collegata. Non un duplicato affatto. –

+0

@Platinum: il secondo è un'espressione di funzione. L'oggetto letterale (qui mancante) non rende nient'altro. – Tomalak

risposta

4

dichiarazione Funzione

function init() { 

} 

Funzione espressione

var init = function() { 

}; 

Le differenze principali hanno a che fare con Variable Hoisting in JavaScript. Puoi leggere di più qui: http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting e http://javascriptweblog.wordpress.com/2010/07/06/function-declarations-vs-function-expressions/

Con il tuo esempio, credo che sei interessato anche a definire anonymous functions in object literals. Ecco un esempio:

//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' 
}; 

questo sarebbe usato in questo modo:

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

In letterali oggetto diverse proprietà dell'oggetto vengono definiti con una sintassi key: value e utilizzare virgole per separarli.

Suggerirei di passare attraverso questa serie gratuita su JavaScript http://learn.appendto.com/lessons, risponderà a molte di queste domande per voi e vi fornirà una solida base per diventare uno sviluppatore JS.

0

Prova Usa di sempre:

init: function(){ 

} 

quando si scrive un oggetto letterale.

Quando si sta cercando di elaborare una funzione globale impostarlo come var, invece, in modo da:

var init = function(){ 

} 

Ricordate, ognuno ha il suo posto, ma ho personalmente affezionato di scrivere uno spazio dei nomi per la progetto su cui sto lavorando e utilizzo di un oggetto letterale.

Ora entrambi saranno disponibili nell'oggetto non appena viene impostato l'oggetto. L'altro metodo è un po 'più sciatto e meno utilizzato ora, ma può essere chiamato indipendentemente dall'ordine delle operazioni, quindi può essere chiamato prima o dopo averlo impostato nel codice ... Di nuovo, questo viene abbandonato in molti casi .

function init(){ 

} 
0

La seconda può essere utilizzata solo nel contesto di un oggetto letterale:

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

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

    someValue = 5 
}; 

La prima forma viene eseguita come un'istruzione.È equivalente a:

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

Il primo esempio definisce una funzione nell'ambito globale che può essere chiamato con init(). Il secondo definisce una proprietà di un oggetto chiamato init ovvero la dichiarazione di funzione a destra.

In generale, il secondo esempio fornisce un ambito più piccolo in cui è possibile eseguire la funzione.

primo esempio consente di chiamare la funzione in questo modo:

init();

E il secondo, più probabilmente questo:

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

thing.init(); 
Problemi correlati