Globale Variabeln sind immer eine schlechte Lösung,
var arr = [];
...
Nanu? Ist arr hier nicht gerade auch eine globale Variable? Ist arr mithin der Funktion nicht sowieso bekannt? Ist demnach
~~~javascript
var arr = [];
function add(val) {arr.push(val);}
add(1);
add(2);
alert(arr);
nicht gleichwertig (mal abgesehen von der Mehrfach-Verwendbarkeit der Funktion)?