I think its a question of what has precedence over one another.
why will:
//var %x = 1 , %t $+ %x = $rand(1,%x) | echo -a %t1
fail and
//var %x = 1 , %t = $rand(1,%x) | echo -a %t
work
parser will tokenize (lack of better term) each %variable asignment before any identifiers are evaluated. if the 2nd token is a = sign it wil start from the 3rd else start from the 2nd.
var %x = [put this into var]
var %x [$+ %t = put this into var]

since the $+ makes the evaluated %t part of the variable assignment instead of the variable content,the variable's name is now actually var %x + evaluated %t.

which explains
//var %x $+ %t = put this into var | echo -a %x
echoing = put this into var
since its
//var %x [$+ %t = put this into var] | echo -a %x
$+ %t is null space is stripped off so "= put this into var" is assigned to %x

a more complex case:
//var %t = 1 , %x $+ %t = put this into var $r(1,%t) = hello | echo -a %x1
actually parses:
//var %t = [1] , %x [$+ %t = put this into var $r(1],%t) = [hello] | echo -a %x1

back to square one:
why does this:
//var %t = 1 , %x = $r(1,%t)
not parse as:
//var %t = [1], %x = [$r(1],%t)
because the = sign makes the parser skip over any variable arguments like $var(arg1,arg2)

To proof this consider this:
//var -s %t = 1 , %x $r(1,%t) | echo -a %x
will fail because this will parse as
//var -s %t = [1] , %x [$r(1],%t) | echo -a %x

So using dynamic local variables makes the parser ignore the = statement which is needed to ignore variable arguements.

Price we pay for a lenient parser smile


$maybe