• 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

Konferencja JOIN! 2018
+1 głos
114 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 Maniak (74,210 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 VIP (141,020 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 VIP (141,020 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

+2 głosów
2 odpowiedzi 75 wizyt
pytanie zadane 10 lipca w JavaScript, jQuery, AJAX przez MrxCI Gaduła (4,830 p.)
0 głosów
2 odpowiedzi 99 wizyt
pytanie zadane 25 maja 2017 w JavaScript, jQuery, AJAX przez crova Użytkownik (950 p.)
0 głosów
1 odpowiedź 109 wizyt
pytanie zadane 6 kwietnia w JavaScript, jQuery, AJAX przez dziedziu Początkujący (370 p.)
Porady nie od parady
Pytania na temat serwisu SPOJ należy zadawać z odpowiednią kategorią dotyczącą tej strony.SPOJ

55,269 zapytań

99,579 odpowiedzi

204,901 komentarzy

27,240 pasjonatów

Przeglądających: 143
Pasjonatów: 4 Gości: 139

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.

...