Consider that mathematically speaking, an array is a function. And an assignment to an array element actually changes the function.
A[i] = E; is actually the same as A = A[E/i];, where the right-hand side reads: "A where i yields E" (notation not to be confused with division). It is formally defined: A[E/i][j] == E (if i == j) A[j] (if i != j). Of course, there are no side-effects in mathematics, but I believe it's beneficial to try to keep as many well-known mathematical identities (like that one) valid in the face of chaos. So your first example would then be equivalent with a = a[gun/fun];, which still leaves the question of side-effect evaluation order. The second example would read: dic = dic[dic.length/word];, which would suggest using the old dic.length. -- Michiel Helvensteijn