O trecho a seguir eu retirei de um artigo, mas eu achei uma boa explicação do comportamento da variável var. No final você pode acessar o link que possui explicações sobre as outras, como let e const.
A grande peculiaridade de uma variável var é o escopo de sua atuação, var possui o que chamamos de escopo de função. Isso significa que se criarmos uma variável deste tipo dentro de uma função, sua referência poderá ser acessada e modificada em qualquer parte desta função, mesmo que criemos outros escopos dentro dela, como um bloco if(), switch() ou for(). Isso pode implicar alguns problemas.
Vamos ver um exemplo disto.
Vamos criar uma função que irá retornar o nome de duas montadoras de carro. O código será o seguinte:
function returnCar() {
var car = 'Land Rover';
if (car === 'Land Rover') {
var car = 'Ferrari';
console.log('Dentro do if: ' + car);
}
console.log('Fora do if: ' + car);
}
returnCar();
console.log('Fora da função: car is not defined.');
// >> Dentro do if: Ferrari
// >> Fora do if: Ferrari
// >> Fora da função: car is not defined.
Note que “Ferrari” foi retornada nos dois casos, tanto dentro como fora do if(). Ou seja, a variável criada dentro do if() sobrescreveu a variável da função, mesmo elas sendo de blocos de código diferentes.
Fonte: [hcode] (https://hcode.com.br/blog/entenda-a-diferenca-entre-var-let-e-const-no-javascript)