• 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
121 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,130 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 (156,960 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 (156,960 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 (34,030 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 (34,030 p.)
Wiem, podałam to jako przykład, może wyraziłam się nie ściśle.

Podobne pytania

0 głosów
2 odpowiedzi 82 wizyt
pytanie zadane 21 października 2018 w JavaScript, jQuery, AJAX przez `Krzychuu Stary wyjadacz (11,310 p.)
+2 głosów
2 odpowiedzi 98 wizyt
pytanie zadane 10 lipca 2018 w JavaScript, jQuery, AJAX przez MrxCI Mądrala (5,620 p.)
0 głosów
2 odpowiedzi 107 wizyt
pytanie zadane 25 maja 2017 w JavaScript, jQuery, AJAX przez crova Użytkownik (950 p.)
Porady nie od parady
Pytania na temat serwisu SPOJ należy zadawać z odpowiednią kategorią dotyczącą tej strony.SPOJ

59,150 zapytań

104,559 odpowiedzi

216,353 komentarzy

31,539 pasjonatów

Przeglądających: 319
Pasjonatów: 16 Gości: 303

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.

...