Hello everyone,
I know let-defined variables are in LexicalEnvironment of running excution context while var-defined variables are in VariableEnvironment of running excution context.
So how about Function Parameters and Inner Function Declarations ?
Example code:
function foo(a, b) {
function bar() {
return 3;
}
}
-> Do a, b and bar belong to LexicalEnvironment or VariableEnvironment ?
Just going off memory (also not TC39), but IIRC parameters get put in the lexical environment (for cases like (a = a) => ...
and (a = b, b = 1) => ...
- those need to throw on invocation), and inner function
s get added to the variable environment as part of the hoisting process.
Yes - to both, because in fact in your example the LexicalEnvironment and the VariableEnvironment are the same environment.
You can find the details in the FunctionDeclarationInstantiation spec. In general, top-level function
declarations go in the same environment as var
declarations, and in exceptional cases there's an extra lexical scope for the parameters around the body.
2 Likes
I'll stand corrected then.