Perdona il ritardo ma ultimamente non sto ricevendo notifiche delle risposte dal forum.
Rispondo comunque per chiarire.
Il + posto davanti ad un valore (una variabile o una qualsiasi espressione che restituisca un valore) non fa altro che convertirne il tipo in numerico.Originariamente inviata da lanvoel
Equivale all'uso del metodo Number() ma è una forma più stringata.
Leggendo la proprietà value di un qualsivoglia elemento HTML (nel caso in easame, il tuo document.getElementById('a').value), si ottiene sempre un valore testuale e non numerico.
Dal momento che ti serve utilizzare tali valori per effettuare delle operazioni numerice dentro la funzione richiamata di seguito, ho preferito convertirli preventivamente in valori numerici per evitare eventuali successivi problemi di conversione.
E' vero che l'operatore * (moltiplicazione), usato poi nella funzione, esegue già un auto-casting dei valori stringa per renderli numerici, ma potrei pensare a differenti scenari in cui dentro quella funzione tu vada ad eseguire differenti operazioni. Usando ad esempio l'operatore + tra due valori, la conversione non avrebbe luogo in questo caso; se vengono usate due stringe (ad esempio quei due valori non convertiti in numeri), si otterrebbe una concatenazione di stringhe testuali e non un'addizione tra numeri, perché l'operatore + è utilizzato anche come operatore di concatenazione.
Per evitare eventuali risultati imprevedibili, penso sia sempre bene trattare i dati secondo lo specifico contesto in cui saranno usati. In questo caso, come spiegato, può essere utile convertirli preventivamente nel tipo più consono (cioè in numero) per evitare che si creino situazioni ambigue a seconda del loro utilizzo.