JS Переменная внешней области - PullRequest
0 голосов
/ 04 апреля 2020

Я работаю над и выключаю игровое приложение на основе игрового шоу Countdown. До сих пор я был в состоянии заставить пользователя выбирать гласные и согласные и вводить слово, которое проверяет, содержит ли введенное слово те же буквы, которые были сгенерированы. Я создал анонимную функцию, которая использует jQuery, чтобы проверить текстовый файл словаря, чтобы увидеть, есть ли он в списке. Тем не менее, я сталкиваюсь с проблемами и продолжаю получать предупреждающее сообщение: «Функции, объявленные в циклах, ссылающихся на переменную внешней области видимости, могут привести к путанице в семантике».

Я не уверен, что я делаю неправильно, см. Код ниже:

 $(".submission").hide();

 //assigning letter container class to variable
 var letterContainer = document.querySelector(".letter-container");

 function pickFrom(letters) {

   // if the length of the letter container is less than 8
   if (letterContainer.innerHTML.length < 8) {

     //add letters to the letter container
     letterContainer.innerHTML += rando(letters);
   }

   //once letter container length reaches 8
   if (letterContainer.innerHTML.length === 8) {

     //show submission input and button
     $(".submission").show();
     //remove letter buttons after 8 letters have been chosen by user
     $(".letter-btn").hide();

     //assign given letters from letter container to a variable
     var givenLetters = letterContainer.innerHTML.split("");


     var inputWord = document.querySelector(".enter-word").value;



     document.querySelector(".submit-word").addEventListener("click", function() {
       var inputWord = document.querySelector(".enter-word").value.split("");
       if (inputWord.length <= 8) {

         //
         var isValid;


         for (var i = 0; i < inputWord.length; i++) {

           // console.log(inputWord[i]);

           if (givenLetters.includes(inputWord[i])) {
             var indexPosition = givenLetters.indexOf(inputWord[i]);
             givenLetters.splice(indexPosition, 1);
             var newWord = inputWord.join("").toLowerCase();

             $.get("https://raw.githubusercontent.com/cpog19901/Countdown/master/text/english3.txt", function(contents) {
               //contents variable now contains the contents of the textfile as string

               //check if file contains the word entered by user
               var hasString = contents.includes(newWord);

               //outputs true if contained, else false
               console.log(hasString);
             });

             isValid = true;

           } else {
             console.log(inputWord[i]);
             console.log("no");
             isValid = false;

           }
         }

         if (isValid == true) {

           console.log("This is a valid word");
         }

         else if (isValid == false) {
           console.log("This is NOT a valid word");
         }

       }
     });

   }
 }

Мне нужно, чтобы все утверждения были истинными, включая анонимную функцию, чтобы она информировала пользователя это верное слово.

1 Ответ

0 голосов
/ 04 апреля 2020

Сообщение об ошибке указывает, что нужно следить за for -loops. Я нашел это:

for (var i = 0; i < inputWord.length; i++) {
    /* … */
    $.get("https://raw.githubusercontent.com/cpog19901/Countdown/master/text/english3.txt", function(contents) {
        /* … */
    }
    /* … */
 }

Этот AJAX вызов сделан каждая отдельная итерация l oop (при условии, что окружающее if истинно).

Вместо этого вы можете сделать это раньше и сохранить результаты в переменной.

...