• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

js es6 - strzałkowa funkcja - pytanie o konkretny przypadek

+1 głos
124 wizyt
pytanie zadane 25 maja 2017 w JavaScript, jQuery, AJAX przez crova Użytkownik (950 p.)

Witam,

bardzo proszę o wytłumaczenie dlaczego tak się dzieje, że w wypadku gdy zapomnimy o nawiasach okrągłych przy wyrzucaniu do konsoli wywołania funkcji zwracającej string:

let greetings = () => "Hello";

console.log(greetings); // poprawnie byłoby console.log(greetings());

 

konsola potraktuje nam cały fragment "() => "Hello"" jako zwracany string. To jest to jakaś luka w języku czy ma to jakieś praktyczne zastosowanie?

 

Pozdrawiam,

crova

komentarz 25 maja 2017 przez JSHolic Szeryf (77,560 p.)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/toString

JavaScript automatycznie wywołuję tą metodę w określonych przypadkach:

JavaScript calls the toString method automatically when a Function is to be represented as a text value, e.g. when a function is concatenated with a string.

2 odpowiedzi

+1 głos
odpowiedź 25 maja 2017 przez adrian17 Mędrzec (173,880 p.)

Nie rozumiem problemu. Akurat Chrome, bo pewnie na nim testujesz, dla strzałek i starych funkcji zachowuje się dokładnie tak samo:

let a = function(){return 1;}
let b = () => 2;
console.log(a) // function (){return 1;}
console.log(b) // () => 2

Printowanie funkcji da tekstowy zapis funkcji. Printowanie wyniku wywołania funkcji pokaże jej wynik.

komentarz 25 maja 2017 przez crova Użytkownik (950 p.)
Nie mam z tym problemu. Po prostu zastanawia mnie dlaczego to działa w ten sposób zamiast wywalać error.
komentarz 25 maja 2017 przez adrian17 Mędrzec (173,880 p.)
Nie ma powodu, by dawać error. Wyświetlenie jakiejś tekstowej reprezentacji funkcji jest czasem pożądane.
+1 głos
odpowiedź 25 maja 2017 przez Kornelia Kobiela Nałogowiec (33,990 p.)
W momencie, gdy wpiszesz z nawiasami - nazwaFunkcji() - to ją wykonujesz i potem wypisujesz na konsolę jej wynik, w tym wypadku string Hello.

Gdy pominiesz nawiasy, to tak naprawdę nie wywołujesz funkcji, tylko zmienną, do której jest coś przypisane. W tym wypadku jest to funkcja. Jeśli coś wypisujesz na konsolę, to ta rzecz dostaje swoją tekstową reprezentację, żeby było można to zrobić.

I tak to ma w JS swoje praktyczne zastosowanie. W ten sposób można przekazać funkcję (a nie jej działanie) jako argument w miejscach, gdzie potrzebujemy działania asynchronicznego np. w eventListenerach.
komentarz 26 maja 2017 przez kap Stary wyjadacz (11,680 p.)

@Kornelia Kobiela Niekoniecznie tam gdzie potrzebujesz działania asynchronicznego - możesz przekazać gdziekolwiek.

komentarz 26 maja 2017 przez Kornelia Kobiela Nałogowiec (33,990 p.)
Wiem, podałam to jako przykład, może wyraziłam się nie ściśle.

Podobne pytania

0 głosów
2 odpowiedzi 91 wizyt
pytanie zadane 21 października 2018 w JavaScript, jQuery, AJAX przez `Krzychuu Stary wyjadacz (12,160 p.)
+2 głosów
2 odpowiedzi 140 wizyt
pytanie zadane 10 lipca 2018 w JavaScript, jQuery, AJAX przez MrxCI Dyskutant (7,950 p.)
0 głosów
2 odpowiedzi 115 wizyt
pytanie zadane 25 maja 2017 w JavaScript, jQuery, AJAX przez crova Użytkownik (950 p.)
Porady nie od parady
Wynikowy wygląd pytania, odpowiedzi czy komentarza, różni się od tego zaprezentowanego w edytorze postów. Stosuj więc funkcję Podgląd posta znajdującą się pod edytorem, aby upewnić się, czy na pewno ostateczny rezultat ci odpowiada.Podgląd posta

62,319 zapytań

108,452 odpowiedzi

226,402 komentarzy

35,115 pasjonatów

Przeglądających: 239
Pasjonatów: 11 Gości: 228

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...