ES6中的LexicalEnvironment和VariableEnvironment有什么区别?

时间:2015-06-12 10:11:41

标签: javascript ecmascript-6 let

两年前在SO上发布了一个类似的问题Clarity on the difference between “LexicalEnvironment” and “VariableEnvironment” in ECMAScript/JavaScript,但它基于ES5。

我现在正在学习ES6,并遇到了一些有趣的事实。例如,在块作用域中,您不能多次使用let声明一个变量。

// you can declare a variable with var multiple times
var a = 1;
var a = 2;
a;     // => 2

// but you can't do that with let
{
    let a = 1;
    let a = 2; // => Error
} 

所以我提到了ES6 draft,有些句子引起了我的注意:

  

const 声明定义范围限定为正在运行的执行上下文的LexicalEnvironment的变量。

     

var 语句声明了作用于正在运行的执行上下文的VariableEnvironment的变量。

好好考虑一下:

// in global execution context
{
    let a = 1;
    var b = 2;
}
console.log(a);    // => ReferenceError: a is not defined
console.log(b);    // => 2

众所周知,let声明会限制块中变量的范围,但我们应该如何理解短语**let** and **const** declarations define variables that are scoped to the running execution context’s LexicalEnvironment.

LexicalEnvironment是否与块有关?

0 个答案:

没有答案