var functionName = function() {} vs function functionName() {}

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.

Twoja odpowiedź

Zaloguj się aby odpowiedzieć.

Operiada

Operiada to polskojęzyczne forum informatyczne działające na zasadzie pytań i odpowiedzi.

Obserwowane tagi

Zaloguj się aby obserwować tagi.