Ultimamente sto imparando la programmazione funzionale in javascript, e c'è una cosa che mi ha confuso. Non riesco a capire se è sempre possibile ridefinire le variabili.
 Qualcosa come:   a = a + 1    lancia immediatamente bandiere rosse.    a    sta mutando, quindi è un no go. E certamente dichiarando una variabile in questo modo:   var a = 10    va bene, dopotutto stiamo solo dando allo stato   10    un nome. Ma che dire di qualcosa di simile: 
function f(x){
  var y = x;
  return y + x;
}
/*overlooking the fact that this code
has no meaningful purpose and could be
simplified as return 2 *x;*/
 È permesso? Dichiarare la variabile y va bene, ma cosa succede se chiamiamo f (x) due volte? Che ne dici di scrivere questa affermazione con la ricorsione? È la ridichiarazione della variabile y più volte ok? Oppure è   y    solo una variabile che esiste solo durante il periodo in cui la funzione nidificata è in esecuzione. 
Mentre cercavo la risposta a questa domanda, mi sono imbattuto in una pagina sulle funzioni pure e impure. Considero che la purezza non è una programmazione funzionale esclusiva. Ulteriori scavi mi hanno detto che dichiarare le variabili all'interno di una funzione potrebbe potenzialmente portare a impurità. Quindi, anche se potessi dichiarare variabili nell'ambito di una funzione, sarebbe problematico? Quali regole devo rispettare per evitare di compromettere la purezza delle mie funzioni?