Funkce šipky JavaScriptu


Obsah

    Zobrazit obsah

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>

Před šipkou:

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>

S funkcí šipky:

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:

Funkce šipek vrací výchozí hodnotu:

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:

Funkce šipky s parametry:

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:

Funkce šipky bez závorek:

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>


A co 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.

Příklad

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>

Příklad

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.


Podpora prohlížeče

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