funkce
JavaScriptu neprovádí žádnou kontrolu hodnoty parametrů (argumenty).
Dříve v tomto tutoriálu jste se dozvěděli, že funkce mohou mít parametry:
function functionName(parameter1, parameter2, parameter3) {
// code to be executed
}
Parametry funkcí jsou názvy uvedené v definice funkce.
Funkční argumenty jsou skutečné hodnoty předaný (a přijatý) funkcí.
Definice funkcí JavaScriptu neurčují datové typy pro parametry.
Funkce JavaScriptu neprovádějí kontrolu typu předávaných argumenty.
Funkce JavaScriptu nekontrolují počet přijatých argumentů.
Pokud je funkce volána s chybějícími argumenty (méně než deklarované), chybějící hodnoty jsou nastaveny na nedefinováno
.
Někdy je to přijatelné, ale někdy je lepší přiřadit výchozí hodnota parametru:
function myFunction(x, y) {
if (y === undefined) {
y = 2;
}
}
Zkuste to sami →
<!DOCTYPE html>
<html>
<body>
<p>Setting a default value to a function parameter.</p>
<p id="demo"></p>
<script>
function myFunction(x, y) {
if (y === undefined) {
y = 2;
}
return x * y;
}
document.getElementById("demo").innerHTML = myFunction(4);
</script>
</body>
</html>
ES6 umožňuje, aby parametry funkcí měly výchozí hodnoty.
Pokud y není předáno nebo není definováno, pak y=10.
function myFunction(x, y = 10) { return x + y;
}
myFunction(5);
Zkuste to sami →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Functions</h1>
<h2>Default Parameter Values</h2>
<p>If y is not passed or undefined, then y = 10:</p>
<p id="demo"></p>
<script>
function myFunction(x, y = 10) {
return x + y;
}
document.getElementById("demo").innerHTML = myFunction(5);
</script>
</body>
</html>
Parametr rest (...) umožňuje funkci zacházet s neurčitým počtem argumentů jako s polem:
function sum(...args) {
let sum = 0;
for (let arg of args) sum += arg;
return sum;
}
let x = sum(4, 9, 16, 25, 29, 100, 66, 77);
Zkuste to sami →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Functions</h1>
<h2>The Rest Parameter</h2>
<p>The rest parameter (...) allows a function to treat an indefinite number of arguments as an array:</p>
<p id="demo"></p>
<script>
function sum(...args) {
let sum = 0;
for (let arg of args) sum += arg;
return sum;
}
let x = sum(4, 9, 16, 25, 29, 100, 66, 77);
document.getElementById("demo").innerHTML = x;
</script>
</body>
</html>
Funkce JavaScriptu mají vestavěný objekt zvaný argumenty objekt.
Objekt argument obsahuje pole argumentů použitých při funkci byl volán (přivolán).
Tímto způsobem můžete jednoduše použít funkci k nalezení (například) nejvyšší hodnota v seznamu čísel:
x = findMax(1, 123, 500, 115, 44, 88);
function findMax() {
let max = -Infinity;
for (let i = 0; i < arguments.length; i++) {
if (arguments[i] > max) {
max = arguments[i];
}
}
return max;
}
Zkuste to sami →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Functions</h2>
<p>Finding the largest number.</p>
<p id="demo"></p>
<script>
function findMax() {
let max = -Infinity;
for(let i = 0; i < arguments.length; i++) {
if (arguments[i] > max) {
max = arguments[i];
}
}
return max;
}
document.getElementById("demo").innerHTML = findMax(4, 5, 6);
</script>
</body>
</html>
Nebo vytvořte funkci pro sečtení všech vstupních hodnot:
x = sumAll(1, 123, 500, 115, 44, 88);
function sumAll() {
let sum = 0;
for (let i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
return sum;
}
Zkuste to sami →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Functions</h2>
<p>Sum of all arguments:</p>
<p id="demo"></p>
<script>
function sumAll() {
let sum = 0;
for(let i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
return sum;
}
document.getElementById("demo").innerHTML = sumAll(1, 123, 500, 115, 44, 88);
</script>
</body>
</html>
Pokud je funkce volána s příliš mnoha argumenty (více než deklarováno), tyto argumenty lze získat pomocí objektu arguments.
Parametry ve volání funkce jsou argumenty funkce.
Argumenty JavaScriptu jsou předávány hodnotou: Pouze funkce zná hodnoty, nikoli umístění argumentu.
Pokud funkce změní hodnotu argumentu, nezmění ani parametr původní hodnota.
Změny argumentů nejsou viditelné (odráží se) mimo funkci.
V JavaScriptu jsou odkazy na objekty hodnotami.
Z tohoto důvodu se objekty budou chovat, jako by byly předány odkazem:
Pokud funkce změní vlastnost objektu, změní původní hodnotu.
Změny vlastností objektu jsou viditelné (odražené) mimo funkci.