Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: error: foo is not a function
Forum PHP.pl > Forum > Po stronie przeglądarki
porzeczki
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. })();
trueblue
Utworzyłeś funkcję anonimową, wywołałeś ją i przypisałeś jej wynik do zmiennej a, po czym traktujesz tą zmienną jak funkcję.
drogimex
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.