Při vývoji programů se velice často setkáte s pojmy "argumenty" a "parametry". Začátečníci mají někdy problém rozlišit rozdíl mezi nimi a v JS se ještě často používané zaměnitelně.
Argumenty se myslí hodnoty, které se předávají do funkce při jejím volání, zatímco parametry se nazývají proměnné, které se používají v definici funkce.
Parametry
Při definování funkce se parametry uvádějí v závorkách za názvem funkce.
V tomto případě funkce add má dva parametry a a b.
function add(a, b) {
return a + b;
}
Argumenty
Argumenty jsou skutečné hodnoty, které jsou posílány do funkce při jejím volání. Tyto hodnoty jsou poté přiřazeny parametrům funkce.
Uvádějí se v závorkách za názvem funkce, například:
add(5, 3);
V tomto případě se do funkce add předávají argumenty 5 a 3.
Při volání funkce se argumenty přiřazují k parametrům podle pořadí, tedy první argument se přiřadí k prvnímu parametru, druhý argument k druhému parametru atd. Funkce pak může pracovat s argumenty jako s normálními proměnnými.
Výchozí hodnoty
Parametry můžou mít výchozí hodnotu, tedy hodnotu která se automaticky použije, pokud se nevyplní argument.
Tohoto se dosáhne pomocí operatoru =
function add(a, b = 0) {
return a + b;
}
V tomto případě bude pokud se nezadá druhý argument funkce, použita defaultní hodnota 0.
Rest parametry
Je taky možné použít speciální tzv. "rest parameters" pro zachycení proměnlivého počtu argumentů.
Tyto argumenty jsou pak předány do funkce jako pole.
function add(a, b, ...others) {
let result = a + b;
for (let number of others) {
result += number;
}
return result;
}
let result = add(1, 2, 3, 4, 5)
V tomto případě funkce add má dva pevné parametry a a b, a třetí parametr others, který je označen rest operátorem. Při volání funkce se zadávají libovolný počet argumentů, například 1, 2, 3, 4, 5. Tyto argumenty se přiřazují k parametrům a a b a zbývající argumenty se přiřazují k parametru others, který se chová jako pole. Funkce pak prochází pole a přidává hodnoty k výsledku.
Destrukturizace
Pokud je jeden z parametrů funkce objekt, můžeme použít destrukturizaci
// ES3
function remove(options) {}
// ES6
function remove({ url, line, column, force }) {}
- Pojmenované parametry s výchozí hodnotou
function foo({ isNested = false }) {}