Mam długiego pliku JavaScript, który przekazuje JSLint z wyjątkiem błędów "used before it defined".Rywalizacja z JS "używane przed zdefiniowaniem" i programistą Titanium
Kiedyś normalne deklaracje funkcji, jak w ...
function whatever() {do something;}
w przeciwieństwie do ...
var whatever = function(){do something;};
i zgodne z Steve Harrison's reply do wcześniejszego postu ...
Zakładając, że zadeklarujesz wszystkie swoje funkcje za pomocą słowa kluczowego funkcji, I pomyśl, że staje się pytaniem o styl programowania w stylu . Osobiście preferuję strukturę moich funkcji w sposób, który wydaje się logiczny i sprawia, że kod jest czytelny, jak to tylko możliwe. Na przykład, , tak jak ty, wstawiłbym funkcję init na u góry, ponieważ od tego wszystko zaczyna się od .
... Lubię widzieć funkcje w kolejności, która ma dla mnie sens.
Skrypt działa doskonale w kilku testowanych przeglądarkach (np. FireFox, Safari, Mobile Safari, Fennec, IE, Chrome, Midori itp.).
Oto problem: chcę użyć skryptu wewnątrz aplikacji na iPhone'a zbudowanej z Titanium, ale jej kompilator zatrzymuje się na błędach "używane przed zdefiniowaniem".
Jak mogę to obejść?
To może być głupie pytanie, ale także ... Jeśli funkcje muszą być wywoływane w określonej kolejności, w jaki sposób rozwiązuje się kwestię wywoływanej funkcji, która musi oddzwonić do funkcji, która pierwotnie ją nazwała? Na przykład ...
function buildMenu(){
Display a list of five menu items, each of which calls a function to build the associated screen.
}
function screen1() {
Display the screen associated with menu item #1.
}
Jeśli funkcje muszą być zadeklarowane w porządku, function screen1
musiałaby poprzedzać function buildMenu
. Ale co jeśli w pewnych warunkach nie można zbudować screen1, a zatem chce on ponownie wyświetlić menu (tj. Wywołanie funkcji, która technicznie jeszcze nie została zadeklarowana)?
O tak ... jeszcze jedno pytanie: czy istnieją strony internetowe lub programy, które automatycznie zmieniają kolejność funkcji, zamiast wymagać od programisty, aby zrobił to ręcznie?
Dziękuję. Nie miałem czasu sprawdzić poprzedniego rozwiązania, więc zrobię to. Dzięki jeszcze raz. –
Dobra uwaga. Właściwie to nie przetestowałem swojego rozwiązania. Właśnie przeprowadziłem to przez jslint. – EndangeredMassa
Działa doskonale zarówno w JSLint i Titanium. Dzięki jeszcze raz. B. BTW: Dla każdego, kto chce wprowadzić tę zmianę do istniejącego skryptu, tak jak ja, prostym skrótem do tworzenia listy zmiennych globalnych funkcji jest uruchomienie skryptu przez JSLint i skopiowanie listy Global z dołu wyniki. To nie jest w 100% dokładne, ale w mojej sytuacji, mając około 100 funkcji, musiałem tylko dokonać pół tuzina poprawek. –