Sorry but a bit of comp sci theory is needed to properly explain what is going on...
The problem is the result of how the WIL interpreter evaluates expressions. The interpreter is an LL2 parser which means that expressions are evaluated from left to right. The "a["w"]" expression is evaluated when the parser encounters the equal sign (=). That is the "2" part of an LL2 parser. Because the "a["w"]" expression is creating a map key, the call to MapKeyFind does find the key "w" in the map. However, because the assignment hasn't finished yet there isn't a value for the key "w". The statement is equivalent to the statement "a["w"] = a["w"]" which generates a slightly different error. In other words, WIL needs to allow map keys without values or you couldn't dynamically create new key entries in a map but you can't use the key on the right-hand side of an assignment statement until the key has a value. Without a value, the expression a["w"] evaluates to undefined when it is part of an expression on the right-hand side of an assignment operator. The colon ( : ) operator encounters the undefined value and issue's the error.
The MapKeyFind function could flag a key with an undefined value as an error when it performs the lookup but that isn't technically an error state because keys with undefined values are allowed in maps. Using the default value when the found key is undefined isn't quite accurate either but that or not changing anything at all may be the best solution. Will have to think about that one a bit.
To answer the specific question the variable is the temporary variable create when a subexpression is evaluated by the parser. In this case, it is the temporary variable created to hold the result of the evaluations of the subexpression "mapkeyfind(a,"w","")".