Funkce šipek byly zavedeny v ES6.
Funkce šipek nám umožňují psát kratší syntaxi funkce:
let myFunction = (a, b) => a * b;
Zkuste to sami →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Functions</h1>
<h2>The Arrow Function</h2>
<p>This example shows the syntax of an Arrow Function, and how to use it.</p>
<p id="demo"></p>
<script>
let myFunction = (a, b) => a * b;
document.getElementById("demo").innerHTML = myFunction(4, 5);
</script>
</body>
</html>
hello = function() {
return "Hello World!";
}
Zkuste to sami →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Functions</h1>
<p>This example shows the syntax of a function, without the use of arrow function syntax.</p>
<p id="demo"></p>
<script>
let hello = "";
hello = function() {
return "Hello World!";
}
document.getElementById("demo").innerHTML = hello();
</script>
</body>
</html>
hello = () => {
return "Hello World!";
}
Zkuste to sami →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Functions</h1>
<h2>The Arrow Function</h2>
<p>This example shows the syntax of an Arrow Function, and how to use it.</p>
<p id="demo"></p>
<script>
let hello = "";
hello = () => {
return "Hello World!";
}
document.getElementById("demo").innerHTML = hello();
</script>
</body>
</html>
Zkracuje se! Má-li funkce pouze jeden příkaz, a příkaz vrátí hodnotu, můžete odstranit závorky a return
klíčové slovo:
hello = () => "Hello World!";
Zkuste to sami →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Functions</h1>
<h2>The Arrow Function</h2>
<p>This example shows an Arrow Function without the brackets or the return keyword.</p>
<p id="demo"></p>
<script>
let hello = "";
hello = () => "Hello World!";
document.getElementById("demo").innerHTML = hello();
</script>
</body>
</html>
Poznámka: Toto funguje pouze v případě, že funkce má pouze jednu prohlášení.
Pokud máte parametry, předáte je v závorkách:
hello = (val) => "Hello " + val;
Zkuste to sami →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Functions</h1>
<h2>The Arrow Function</h2>
<p>This example shows an Arrow Function with a parameter.</p>
<p id="demo"></p>
<script>
let hello = "";
hello = (val) => "Hello " + val;
document.getElementById("demo").innerHTML = hello("Universe!");
</script>
</body>
</html>
Ve skutečnosti, pokud máte pouze jeden parametr, můžete přeskočit i závorky:
hello = val => "Hello " + val;
Zkuste to sami →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Functions</h1>
<h2>The Arrow Function</h2>
<p>This example shows that if you have only one parameter in an Arrow Function, you can skip the parentheses.</p>
<p id="demo"></p>
<script>
let hello = "";
hello = val => "Hello " + val;
document.getElementById("demo").innerHTML = hello("Universe!");
</script>
</body>
</html>
toto
?Zpracování toto
se také liší ve funkcích šipek ve srovnání s běžnými funkcí.
Stručně řečeno, s funkcemi šipek nejsou žádné vazby toto
.
V běžných funkcích představovalo klíčové slovo toto
objekt, který volá funkcí, kterou může být okno, dokument, tlačítko nebo cokoliv jiného.
S funkcemi šipek toto
klíčové slovo vždy představuje namítat to definovala funkci šipky.
Podívejme se na dva příklady, abychom pochopili rozdíl.
Oba příklady volají metodu dvakrát, nejprve při načtení stránky a ještě jednou když uživatel klikne na tlačítko.
První příklad používá běžnou funkci a druhý příklad používá a funkce šipky.
Výsledek ukazuje, že první příklad vrací dva různé objekty (okno a tlačítko), a druhý příklad vrátí objekt okna dvakrát, protože objekt okna je "majitel" funkce.
S běžnou funkcí toto
představuje objekt, který volá funkci:
// Regular Function:
hello = function() {
document.getElementById("demo").innerHTML
+= this;
}
// The window object calls the function:
window.addEventListener("load", hello);
// A button object calls the
function:
document.getElementById("btn").addEventListener("click", hello);
Zkuste to sami →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript "this"</h1>
<p>This example demonstrate that in a regular function, the "this" keyword represents different objects depending on how the function was called.</p>
<p>Click the button to execute the "hello" function again, and you will see that this time "this" represents the button object.</p>
<button id="btn">Click Me!</button>
<p id="demo"></p>
<script>
let hello = "";
hello = function() {
document.getElementById("demo").innerHTML += this;
}
//The window object calls the function:
window.addEventListener("load", hello);
//A button object calls the function:
document.getElementById("btn").addEventListener("click", hello);
</script>
</body>
</html>
S funkcí šipky toto
představuje vlastník funkce:
// Arrow Function:
hello = () => {
document.getElementById("demo").innerHTML
+= this;
}
// The window object calls the function:
window.addEventListener("load", hello);
// A button object calls the
function:
document.getElementById("btn").addEventListener("click", hello);
Zkuste to sami →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript "this"</h1>
<p>This example demonstrate that in Arrow Functions, the "this" keyword represents the object that owns the function, no matter who calls the function.</p>
<p>Click the button to execute the "hello" function again, and you will see that "this" still represents the window object.</p>
<button id="btn">Click Me!</button>
<p id="demo"></p>
<script>
let hello = "";
hello = () => {
document.getElementById("demo").innerHTML += this;
}
//The window object calls the function:
window.addEventListener("load", hello);
//A button object calls the function:
document.getElementById("btn").addEventListener("click", hello);
</script>
</body>
</html>
Pamatujte na tyto rozdíly, když pracujete s funkcemi. Někdy chování běžných funkcí je to, co chcete, pokud ne, použijte funkce šipek.
Následující tabulka definuje první verze prohlížečů s plnou podporou Funkce šipek v JavaScriptu:
Chrome 45 | Edge 12 | Firefox 22 | Safari 10 | Opera 32 |
Sep, 2015 | Jul, 2015 | May, 2013 | Sep, 2016 | Sep, 2015 |