6

Czy jest między nimi jakaś różnica? Używam obu sposobów, ale nie wiem, który z nich robi to, co jest lepsze?co jest lepszym sposobem na zdefiniowanie funkcji?

function abc(){ 

    // Code comes here. 
} 

abc = function(){ 

    // Code comes here. 
} 

Czy istnieje jakaś różnica między definiowaniem tych funkcji? Coś jak i ++ i ++ i?

+1

powtarzane pytanie: http://stackoverflow.com/questions/336859/javascript-var-functionname-function- vs-function-functionname – ikis

+0

Dlaczego dodałeś ponownie tag 'html'? To pytanie nie ma nic wspólnego z HTMLem! –

+0

to dlatego, że ludzie mogą rozważyć to pytanie do java - który używa podejścia zorientowanego obiektowo ... – Janak

Odpowiedz

7
function abc(){ 

    // Code comes here. 
} 

Zostanie podniesiony.

abc = function(){ 

    // Code comes here. 
} 

Nie będzie podnoszony.

Na przykład jeśli nie:

abc(); 
function abc() { } 

Kod będzie działał jako abc jest podniesiona do góry zakresu okalającego.

Jeśli jednak tak:

abc(); 
    var abc = function() { } 

abc jest zadeklarowana ale nie ma żadnej wartości, a zatem nie może być używany.

Co do tego, co jest lepsze, to bardziej debata stylu programowania.

http://www.sitepoint.com/back-to-basics-javascript-hoisting/

+0

Nitpick: * "Wtedy' abc' nie jest jeszcze zadeklarowany i nie może być użyty. "* Deklaracje zmiennych również są podnoszone, więc zmienna jest zadeklarowana, ale nie ma jeszcze żadnej wartości. –

+0

@FelixKling - zaktualizowano. Twoje zdrowie. –

1

Krótka odpowiedź: nie.

Umieszczasz funkcję w globalnym obszarze nazw. Każdy może uzyskać do tego dostęp, każdy może go zastąpić.

Im bardziej bezpieczny standardowy sposób to zrobić to wszystko zawinąć w funkcji własnym numerem:

(function(){ 
    // put some variables, flags, constants, whatever here. 
    var myVar = "one"; 

    // make your functions somewhere here 
    var a = function(){ 
     // Do some stuff here 

     // You can access your variables here, and they are somehow "private" 
     myVar = "two"; 
    }; 


    var b = function() { 

     alert('hi'); 
    }; 

    // You can make b public by doing this 
    return { 
     publicB: b 
    }; 
})();