首页 > 解决方案 > 可变阴影导致功能失败

问题描述

我对范围概念感到困惑,首先我在全局范围内声明了一个 let。

'use strict';

let secretNumber = Math.trunc(Math.random()* 20)+ 1;
let score = 20;
let highscore = 0;

和游戏逻辑


document.querySelector('.check').addEventListener('click',function(){
   
    let guess = Number( document.querySelector('.guess').value);
  
    console.log(guess, typeof guess)
   
    if(!guess){
        document.querySelector('.message').textContent = ' Need a number!'
    }
    
    else if ( guess === secretNumber){
        document.querySelector('.number').textContent =secretNumber;
        document.querySelector('.message').textContent = ' Correct Answer ! '
        if ( score > highscore){
            highscore = score;
            document.querySelector('.highscore').textContent = score;
        }
    }
   
    else if(guess > secretNumber){
        if(score > 1) {
        
        document.querySelector('.message').textContent = ' Too High'
        score--;
        document.querySelector('.score').textContent = score}else {
        
            document.querySelector('.message').textContent='ou Lost The Game '
            document.querySelector('.score').textContent = '0'
        };
    }
    
    else if(guess < secretNumber){
        if(score > 1){
        
        document.querySelector('.message').textContent = ' Too Low'
        score--;
        document.querySelector('.score').textContent = score}
        else {
        
            document.querySelector('.message').textContent='You Lost The Game '
            document.querySelector('.score').textContent = '0'
        };
        ;
    }
})

我正在尝试实现再次播放逻辑但保持最高分。

document.querySelector('.again').addEventListener('click',function(){
    let score = 20;
    document.querySelector('.message').textContent = 'Start Guessin ....'
    document.querySelector('.guess').value = '';
    document.querySelector('.score').textContent = score;
    secretNumber = Math.trunc(Math.random()* 20)+ 1;
    document.querySelector('.number').textContent = secretNumber
})

我注意到我在 play-again 函数中隐藏了一个 let ,所以我对三件事感到困惑:

一世。为什么要在一个函数中重新声明一个让整个块失败的函数,因为它显然是两个不同的函数。

ii. 为什么我的检查功能在我的再次播放功能中寻找让?它不应该只寻找变量向上(父/全局范围)吗?

iii. 什么原因,当我再次点击播放时,整个块只会寻找新声明的变量而忽略前一个,导致高分if else语句失败?

如果您愿意帮助解释这个概念,请提前感谢你们。

ps最后一个问题已关闭,决定发布一个新问题并提供更多详细信息。

标签: javascript

解决方案


推荐阅读