Wszystko działa dobrze, gdy napisałem logikę js w zamknięciu jako pojedynczy plik js, jako:
(function(win){
//main logic here
win.expose1 = ....
win.expose2 = ....
})(window)
ale kiedy próbuję wstawić alternatywną funkcję logowania przed tym zamknięciem w tym samym pliku js,
window.Glog = function(msg){
console.log(msg)
}
// this was added before the main closure.
(function(win){
//the former closure that contains the main javascript logic;
})(window)
narzeka, że jest TypeError:
Uncaught TypeError: (intermediate value)(...) is not a function
Co zrobiłem źle?
źródło
if
instrukcji wuseEffect()
funkcji React, gdy otrzymywałem ten błąd „... nie jest funkcją”.Aby uprościć reguły dotyczące średników
Każda linia, która zaczyna się od
(
,[
`lub każdy podmiot (/, +, - ważne są tylko te), musi zaczynać się średnikiem.Zapobiega to
potworność.
Dodatkowa uwaga
Aby wspomnieć, co się stanie: nawiasy będą indeksowane, nawiasy będą traktowane jako parametry funkcji. Lewy przycisk zmieniłby się w otagowany szablon , a wyrażenie regularne lub jawnie podpisane liczby całkowite zamieni się w operatory. Oczywiście możesz po prostu dodać średnik na końcu każdego wiersza. Warto jednak o tym pamiętać, gdy szybko tworzysz prototypy i upuszczasz średniki.
Ponadto dodanie średników na końcu każdej linii nie pomoże Ci w następujących kwestiach, więc pamiętaj o stwierdzeniach takich jak
Powyższy przypadek spowoduje powrót / kontynuowanie / przerwanie / ++ / -. Każdy linter złapie to martwym kodem lub błędem składni ++ / - (++ / - nigdy się nie wydarzy).
Wreszcie, jeśli chcesz, aby konkatenacja plików działała, upewnij się, że każdy plik kończy się średnikiem. Jeśli używasz programu typu bundler (zalecane), powinien to zrobić automatycznie.
źródło
Przypadek błędu:
Wynik:
Poprawka: brakuje średnika (;) do oddzielenia wyrażeń
źródło
Dla mnie było to znacznie prostsze, ale zajęło mi trochę czasu, zanim to rozgryzłem. Zasadniczo mieliśmy w naszym .jslib
Okazuje się, że Unity (emscripten?) Po prostu nie lubi tej składni. Zastąpiliśmy go starą, dobrą pętlą for i od razu przestał narzekać. Naprawdę nienawidzę tego, że nie pokazuje linii, na którą narzeka, ale tak czy inaczej, oszukuj mnie dwa razy, wstydź mnie.
źródło
(
w następnym wierszu nie ma średnika . Nie widzę tego w twoim przypadku. Pytanie składa się nie tylko z tytułu!Miałem do czynienia z tym problemem, kiedy tworzyłem nową klasę ES2015, w której nazwa właściwości była równa nazwie metody.
na przykład:
Zwróć uwagę, że ta implementacja była w NodeJS 6.10.
Aby obejść ten problem (jeśli nie chcesz używać nudnej nazwy metody „setTest”), możesz użyć przedrostka dla swoich właściwości „prywatnych” (np
_test
.).Otwórz narzędzia programistyczne w jsfiddle .
źródło
Wynik: TypeError: (wartość pośrednia) (wartość pośrednia) nie jest funkcją * Jak to naprawić -> ponieważ brakuje średnika (;) do oddzielenia wyrażeń;
dlaczego pojawia się ten błąd? Powód: szczególne zasady automatycznego wstawiania średników, które są zgodne ze standardami ES6
źródło
Kiedy tworzę klasę główną, której metody zdefiniowałem za pomocą funkcji strzałek. Podczas dziedziczenia i nadpisywania oryginalnej funkcji zauważyłem ten sam problem.
rozwiązuje się to poprzez zdefiniowanie metody klasy nadrzędnej bez funkcji strzałkowych
źródło