In an expression of the form x[i]=y, the left-hand side x[i] is not evaluated first. Instead, it is interpreted as Base.setindex!(x,y,i). This is not unique to Julia: Matlab and Python basically do the same.

On the other hand, x[i].=y becomes broadcast!(identity,view(x,i),y), and more generally x[i] .= f.(y) is broadcast!(f,view(x,i),y) etc.
This is different, since, e.g., x[1:2] .= 1 broadcasts 1 into the index’s shape, whereas x[1:2] = 1 is an error.
Also, if you do x[i] = f.(y) you are asking for a temporary array f.(y), whereas x[i] .= f.(y) is an in-place computation.