Niedawno dostałem kod JavaScript innej osoby. Naprawiam błędy, dodaję funkcje, a także staram się uporządkować kod i uczynić go bardziej spójnym.
Poprzedni programista używał dwóch sposobów deklarowania funkcji i nie mogę się zorientować, czy za tym stoi jakiś powód. Te dwa sposoby to:
var functionOne = function() {
// Some code
};
function functionTwo() {
// Some code
}
Jakie są powody korzystania z tych dwóch różnych metod i jakie są zalety i wady każdego z nich? Czy jest coś, co można zrobić za pomocą jednej metody, której nie można zrobić z drugą?\
2 odpowiedzi
Różnica polega na tym, że functionOne jest wyrażeniem funkcji i dlatego jest definiowane tylko wtedy, gdy linia jest osiągnięta, podczas gdy functionTwo jest deklaracją funkcji i jest definiowana natychmiast po wykonaniu otaczającej funkcji lub skryptu. Na przykład wyrażenie funkcji:
functionOne();
var functionOne = function() {
console.log("Hello!");
};
I deklaracja funkcji:
functionTwo();
function functionTwo() {
console.log("Hello!");
}
Oznacza to również, że nie można warunkowo definiować funkcji za pomocą deklaracji funkcji:
if (test) {
// Error or misbehavior
function functionThree() { doSomething(); }
}
Powyższe faktycznie definiuje finctionThree, niezależnie od wartości testu - chyba że obowiązuje ścisłe, w którym to przypadku po prostu wywołuje błąd.
Różnica polega na tym, że functionOne jest wyrażeniem funkcji i dlatego jest definiowane tylko wtedy, gdy linia jest osiągnięta, podczas gdy functionTwo jest deklaracją funkcji i jest definiowana natychmiast po wykonaniu otaczającej funkcji lub skryptu. Na przykład wyrażenie funkcji:
functionOne();
var functionOne = function() {
console.log("Hello!");
};
I deklaracja funkcji:
functionTwo();
function functionTwo() {
console.log("Hello!");
}
Oznacza to również, że nie można warunkowo definiować funkcji za pomocą deklaracji funkcji:
if (test) {
// Error or misbehavior
function functionThree() { doSomething(); }
}
Powyższe faktycznie definiuje finctionThree, niezależnie od wartości testu - chyba że obowiązuje ścisłe, w którym to przypadku po prostu wywołuje błąd.