Miejsce deklaracji zmiennych globalnych
Można postawić pytanie: czy wszystkie zmienne globalne powinny być deklarowane w zasięgu globalnym? Przeanalizujmy. Jest pięć zmiennych globalnych:
headerQuestion
,input
,oldQuestionIndex
,btnSubmit
,quizArr
.
Ad 1. Zmienna headerQuestion
reprezentuje element HTML przechowujący pytanie. Jest używana tylko w jednym miejscu, w funkcji showRandomQuestion
. Tak więc lepiej zrobić ją lokalną. Przenieś jej deklarację do funkcji showRandomQuestion
.
Ad 2. Zmienna input
reprezentuje listę elementów HTML przechowujących odpowiedzi. Jest używana w dwóch miejscach: w funkcji validateIfChecked
oraz w handlerze kliknięcia na przycisk Submit
. Tak więc lepiej zrobić ją lokalną. Przenieś jej deklarację w dwa miejsca: do funkcji validateIfChecked
oraz do handlera kliknięcia na przycisk Submit
.
Ad 3. Zmienna oldQuestionIndex
reprezentuje indeks poprzedniego pytania. Jest używana tylko w jednym miejscu, w funkcji getRandomQuestion
. Powinna być "zewnętrzna" w stosunku do kodu wyświetlającego poszczególne pytania. Jedyne miejsce, jakie mi przychodzi do głowy, to właśnie to, gdzie jest obecnie; więc – tutaj nic nie zmieniaj, zmienna powinna zostać globalna.
Ad 4. Zmienna btnSubmit
reprezentuje przycisk Submit
. Jest używana tylko w jednym miejscu, w zasięgu globalnym. Tutaj nie da się nic zmienić; zmienna powinna zostać globalna.
Ad 5. Zmienna quizArr
reprezentuje listę pytań i wariantów odpowiedzi. Jest używana w trzech miejscach: w funkcji getRandomQuestion
, w funkcji getRandomVariants
oraz w funkcji showRandomQuestion
. Ponieważ lista pytań i wariantów odpowiedzi jest jakby konfiguracją aplikacji, to myślę, że najlepiej będzie zostawić ją globalną.
Sposób wykorzystania zmiennych globalnych
Wszystkie zmienne globalne, które jeszcze zostały, powinny być deklarowane globalnie. Niemniej można postawić następne pytanie: czy ze wszystkich z nich funkcje powinny korzystać tak jak ze zmiennych globalnych? Inaczej mówiąc, czy nie można by tych zmiennych przekazać w parametrze funkcji? Przeanalizujmy. Po zmianach, o których napisałem wyżej, powinny zostać trzy zmienne globalne:
oldQuestionIndex
,btnSubmit
,quizArr
.
Ad 1. Zmienna oldQuestionIndex
nie może być przekazana jako parametr funkcji getRandomQuestion
, ponieważ jest w niej zmieniana. Powinna zostać, jak jest.
Ad 2. Zmienna btnSubmit
nie może być przekazana jako parametr funkcji, bo jest wykorzystywana w zasięgu globalnym (czyli poza jakąkolwiek funkcją). Powinna zostać, jak jest.
Ad 3. Zmienna quizArr
może być przekazana jako parametr wszystkich funkcji, w których jest używana: getRandomQuestion
, getRandomVariants
oraz showRandomQuestion
. Dodaj w każdej z tych funkcji po jednym parametrze o takiej samej nazwie jak ta zmienna.
Na razie tyle. Może się z czymś nie zgadzasz, co napisałem? Może czegoś nie rozumiesz? Pytaj. Jeśli rozumiesz wszystko, to zrób zmiany i zobaczymy, co można dalej w kodzie zrobić.
quizArr
jest wykorzystywana w funkcjishowRandomQuestion
w tej linii:const questionObject = quizArr[displayQuestQizIndex];
quizArr
, dodaj argumentquizArr
.