>

이 문제가 발생하는 이유는 매우 혼란 스럽습니다. 기본적으로, 나는 단어/문구 추측 게임을 만들려고 노력하고 있으며 올바른 버튼 문자가 문구의 문자와 일치하면 문자를 발견합니다. 변수 안에 일치하는 (정확한) 문자를 저장하고 해당 문자를 반환해야합니다. 추측 한 문자가 올바른 것이 아닌 경우 null을 반환하는 함수가 필요합니다.

function checkLetter(clickedLetter) {
let letterFound = ""
if (clickedLetter.tagName == "BUTTON"){
    clickedLetter.className = "chosen";
    clickedLetter.setAttribute("disabled", "true");
    const li = document.querySelectorAll("li.letter")
    for (let i = 0 ; i < li.length ; i++){
        if (clickedLetter.textContent.toLowerCase() == li[i].textContent.toLowerCase()){
            li[i].classList = "show";
            letterFound = li[i]
           //without this return statement, it runs fine
            return letterFound
        } else {
        //without this return statement, it runs fine
        return null
        }
    }
}
}
qwerty.addEventListener("click", (e) => {
    const clickedLetter = e.target;
    checkLetter(clickedLetter);
});

https://jsfiddle.net/y4q7ot68/1/ 다음은 return 문이 주석 처리되어 작동하는 jfiddle 데모입니다. 당신이 반환 진술을 주석 해제하면, 그것은 모두 엉뚱하고 문자 및/또는 모든 문자를 발견하지 않습니다. 내가 뭘 잘못하고 있니?

  • 답변 # 1

    엉뚱한 행동을하는 이유는 for 루프에 있고 여러 번 리턴하기 때문입니다. 첫 번째 리턴 후에는 함수가 종료됩니다. 리턴 기능을 유지하려면 for 루프에서 리턴을 삭제하고 var를 작성하고 처음부터 찾은 경우 false로 설정하고 for 루프 외부에서 if 명령문과 비교하여 리턴 명령문을 가질 수있는 경우이를 비교하십시오.

    function checkLetter(clickedLetter) {
      let letterFound = ""
      if (clickedLetter.tagName == "BUTTON") {
        clickedLetter.className = "chosen";
        clickedLetter.setAttribute("disabled", "true");
        const li = document.querySelectorAll("li.letter")
        var boolFound = false;
        for (let i = 0; i < li.length; i++) {
          if (clickedLetter.textContent.toLowerCase() == li[i].textContent.toLowerCase()) {
            li[i].classList = "show";
            letterFound = li[i];
            boolFound = true;
          } else {
            /* No return */
          }
        }
        if (boolFound == true) {
          return letterFound;
        } else {
          return null;
        }
      }
    }
    
    

    또한이 함수를 호출 한 곳에서 다음을 잊지 마십시오 :

    randomvar=checkLetter(clickedLetter);
    
    

관련 자료

  • 이전 R의 데이터 프레임과 함께 플롯을 사용하여 시계열 그래프를 플롯 할 수 없습니다 "$연산자는 원자 벡터에 유효하지 않습니다"라는 오류가 계속 발생합니다
  • 다음 firebase cloud messaging - xamarin에서 FCM 등록을위한 장치 ID를 얻는 방법