Oi Jefferson! Tudo bem?
Vamos esclarecer isso!
No JavaScript, quando você declara uma variável com let dentro de uma função, ela realmente tem escopo de função, ou seja, só é acessível dentro daquela função. No entanto, se você está passando essa variável como argumento para outras funções, como comprarPista(qtd), você está efetivamente passando o valor da variável qtd para essas funções. Isso significa que as funções comprarPista(), comprarInferior(), e comprarSuperior() não estão acessando a variável qtd diretamente, mas sim o valor que foi passado para elas.
No seu caso, a função comprar() está chamando comprarPista(qtd), passando o valor de qtd como argumento. Dentro de comprarPista(), esse valor é recebido como um parâmetro, que também é chamado de qtd, mas é independente da variável qtd da função comprar(). Isso é perfeitamente válido e é uma prática comum em programação.
Aqui está um exemplo simplificado para ilustrar:
function comprar() {
let qtd = 10; // Escopo da função comprar
comprarPista(qtd); // Passa o valor de qtd para comprarPista
}
function comprarPista(qtd) {
console.log(qtd); // Acessa o valor passado, não a variável original
}
Espero que isso ajude a esclarecer o que você estava deixando passar. É sempre bom revisar como os valores são passados entre funções e como o escopo das variáveis funciona.
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.