W błędnym przykładzie, wywołanie funkcji sum(1, 2)
zaloguje do konsoli wartość NaN
.
JavaScript w przeciwieństwie do innych języków np. C++, Java, Swift, nie pozwala na przeciążanie funkcji, czyli deklarowania ich używając tej samej nazwy funkcji ale z innymi parametrami.
Co ciekawe TypeScript zezwala na definiowanie funkcji przeciążających.
O ile przeciążanie funkcji nie jest możliwe w JavaScript, to nadpisywanie ich już jak najbardziej tak.
Nie dostajemy więc błędu o zdefiniowaniu funkcji z nazwą, która już istnieje, bo jest to dozwolone.
Do konsoli zostaje zalogowane NaN
(skrót od Not-A-Number), bo JavaScript nie może wykonywać operacji matematycznych na typach danych innych niż Number
.
Nadpisując funkcję sum()
, nadpisujemy ją deklarując w jej nowej wersji trzy parametry.
Wywołując sum()
przekazujemy tylko dwa argumenty. Trzeci, brakujący, używany wewnątrz funkcji jako parametr pozostaje niezdefiniowany.
Operacja wewnątrz funkcji 1 + 2 + undefined
zwraca więc NaN
.
Aby rozwiązać problem, najprościej będzie nam nadpisać funkcję w odwrotnej kolejności, lub kompletnie pozbyć się deklaracji funkcji sum()
z trzema parametrami.