Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> error: foo is not a function
porzeczki
post
Post #1





Grupa: Zarejestrowani
Postów: 144
Pomógł: 0
Dołączył: 15.09.2016
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


jak rozumieć taki błąd:
Cytat
Uncaught TypeError: a is not a function at <anonymous>:1:1



  1. var a = (function () {return c += 1;})();
  2. a();




------------------
bo poniższe jest ok
  1. var a = (function () {
  2. return function () {return c += 1;}
  3. })();


Ten post edytował porzeczki 26.01.2017, 21:31:45
Go to the top of the page
+Quote Post
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Utworzyłeś funkcję anonimową, wywołałeś ją i przypisałeś jej wynik do zmiennej a, po czym traktujesz tą zmienną jak funkcję.


--------------------
Go to the top of the page
+Quote Post
drogimex
post
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 1
Dołączył: 28.03.2016

Ostrzeżenie: (0%)
-----


Stworzyłeś dokładniej mówią tzw. funkcję natychmiastową(Immediately-invoked function expression), czyli taką, która od razu zostaje wywołana.
Funkcje możesz tworzyć na kilka sposobów, ale tutaj domyślam się, że chciałeś zrobić coś takiego:
[JAVASCRIPT] pobierz, plaintext
  1. var c = 0,
  2. a = function () { return c += 1; };
  3. c; //0
  4. a(); //1
  5. c; //1
  6. a(); //2
  7. c; //2
[JAVASCRIPT] pobierz, plaintext

Przy takim zapisie tworzysz tzw. wyrażenie funkcyjne, czyli ogólnie mówiąc funkcję przypisaną do zmiennej a. Nie jest to taki sam zapis jak:

[JAVASCRIPT] pobierz, plaintext
  1. function a () { return c += 1; }
[JAVASCRIPT] pobierz, plaintext

Jedną z najważniejszych różnic jest miejsce faktycznego zdefiniowania funkcji a. W JS pierwszeństwo mają definicje funkcji, a dopiero później deklarowane są zmienne (tzw. hoisting).

Twoje rozwiązanie z tzw. funkcją natychmiastową jest często wykorzystywane po to, aby nie zaśmiecać globalnego zakresu zmiennymi, a jednocześnie dzięki tzw. domknięciom można bardzo ładnie ograniczać ilość zmiennych globalnych, w wielu przypadkach nawet tylko do jednej zmiennej.

Ten post edytował drogimex 27.01.2017, 23:14:54
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 14:25