I am confusing about a scope concept, firstly I declared a let in global scope.
'use strict';
let secretNumber = Math.trunc(Math.random()* 20)+ 1;
let score = 20;
let highscore = 0;
and a game logic
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'
        };
        ;
    }
})
I'm trying to implement a play again logic but keep the highest score.
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
})
I noticed I shadowing a let in the play-again function, so I'm confusing about three things:
i. Why re-declare a let in a function causing the whole block to fail when it's clearly two different functions.
ii. Why is my check function look for the let in my play again function ? Shouldn't it be only looking for the variable upward(parent / Global scope) ?
iii. what's the reason when I clicked the play again, the whole block will only looking for the newly declared variable and ignore the previous one and causing the high-score if else statement to fail?
Thank you guys in advanced if you're willing to help explain this concept.
p.s last question got closed, decided to post a new question and provide more details.
