2012-02-06 11 views
5

Powiel możliwe: 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?Funkcja JavaScript inna składnia?

Jaka jest różnica między dwiema następującymi sposobami pisania funkcję? Widziałem oba używane, ale nie jestem pewien, który z nich jest "poprawny".

function init() { 

} 


init: function() { 

}, 

Jakie są zalety pisania go w drugą stronę?

+0

Poza. Drugi nie jest nawet poprawny pod względem składni w tym kontekście. – Tomalak

+2

@ Tomalak: Nie, składnia funkcji literału funkcji nie jest omawiana w połączonym pytaniu. Nie duplikat w ogóle. –

+0

@ Platinum: Drugi to wyrażenie funkcji. (Brakujący) dosłowny obiekt nie czyni go niczym innym. – Tomalak

Odpowiedz

4

deklaracja Funkcja

function init() { 

} 

Funkcja wyrażenie

var init = function() { 

}; 

Różnice podstawowe mają do czynienia z Variable Hoisting w JavaScript. Możesz przeczytać więcej tutaj: http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting i http://javascriptweblog.wordpress.com/2010/07/06/function-declarations-vs-function-expressions/

Według Twojego przykładu, jestem również zainteresowany zdefiniowaniem anonymous functions w object literals. Oto przykład:

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

to będzie używane w taki sposób:

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

W literałach obiektów różne właściwości obiektu są definiowane składni key: value i używać przecinki je rozdzielić.

Polecam przejście przez tę darmową serię na JavaScript http://learn.appendto.com/lessons, odpowie na wiele z tych pytań i da ci solidną podstawę do zostania programistą JS.

0

Staraj się zawsze używać:

init: function(){ 

} 

pisząc przedmiotu dosłowne.

Kiedy starasz się przetworzyć funkcję globalnego ustawić go jako var zamiast tak:

var init = function(){ 

} 

Pamiętaj, że każdy ma swoje miejsce, ale ja osobiście polubił pisanie nazw dla projekt, nad którym pracuję i używam literału obiektowego.

Teraz obie te opcje będą dostępne tylko w obiekcie, gdy tylko obiekt zostanie ustawiony. Druga metoda jest trochę bardziej niechlujna i mniej używana teraz, ale można ją nazwać niezależnie od kolejności operacji, więc można ją wywołać przed lub po jej ustawieniu w kodzie ... Znowu jest to porzucane w wielu przypadkach .

function init(){ 

} 
0

Drugi może być stosowany jedynie w kontekście obiektu dosłownym:

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

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

    someValue = 5 
}; 

Pierwsza forma jest wykonywany jako oświadczenie.Jest to odpowiednik:

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

Pierwszy przykład definiuje funkcję w globalnym zasięgu, która może być wywołana z init(). Drugi definiuje właściwość obiektu o nazwie init, który jest deklaracją funkcji po prawej stronie.

Ogólnie rzecz biorąc, drugi przykład zapewnia mniejszy zakres, w którym można wykonać tę funkcję.

Pierwszy przykład pozwala wywołać funkcję tak:

init();

a druga, bardziej prawdopodobne to:

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

thing.init();