Thanks for explaining!
But how about this example:
x:42
{x+1}[5]
It results in
6
It seems like you can define variables with the name 'x', but when you do not have explicit parameters, then the identifier 'x' is used to refer to the first implicit parameter, y - for second and z - for the third parameter. In context of implicit parameters x, y and z acts like predefined keywords.
q's functions don't capture the environment, so that's the same as:
a:42
{[a]a+1}[5]
and as in javascript:
a=42;
f=function(a){return a+1}
and when i say they don't capture the environment, i mean this:
f:{[g] {g+x}}
doesn't do anything except generate errors (° there are benefits to this approach!) because the inner function (that we are returning) sees the "global" g and not the one lexically scoped in the function (a better way to say it: no closures).