ES5: LexicalEnvironment versus VariableEnvironment?

Axel Rauschmayer axel at rauschma.de
Tue Apr 19 09:37:03 PDT 2011


I hope this is the right place to ask this question:

When are LexicalEnvironment and VariableEnvironment ever not the same? My understanding, derived from ECMA-262 is as follows:

(1) Mainly needed for "with", because properties should be found during identifier lookup, but new bindings should be made in the surrounding environment.

(2) Function definitions: function declarations use the VariableEnvironment as scope, while function expressions use the LexicalEnvironment. Rationale? To make function declarations function-global (=ignoring with statements)?

Did I miss any differences?

The following code can be used to test (2). Console output is "bar" on Firefox and Rhino, "abc" on V8 (Node.js). If you use a function expression, the output is "bar" on all platforms.

var foo = "abc";
with({ foo: "bar" }) {
    function f() {
        console.log(foo);
    }
    f();
}

Any confirmations are highly appreciated.

Greetings,

Axel

-- 
Dr. Axel Rauschmayer

axel at rauschma.de
twitter.com/rauschma

home: rauschma.de
blog: 2ality.com





More information about the es-discuss mailing list