let keyword - 字典数据模型的字典

时间:2017-09-08 21:13:19

标签: javascript dictionary ecmascript-6

此查询与存储结构相关,但不了解let关键字的范围规则。

使用var关键字,awindow对象的属性(如字典)

var a = 10;
console.log(window.a); // 10
console.log(window['a']) // 10

fwindow对象

的属性
function f(){}

console.log(window['f']) // function object

使用let关键字,b不是window字典的属性

let b = 20;
console.log(window.b); // undefined

我的理解是,JavaScript代码中引入的任何名称(函数/ var / ..)都是window字典(嵌套)对象的属性(成员)。

修改

enter image description here

谁的财产是b

1 个答案:

答案 0 :(得分:1)

您提供的所有代码都与“词典”无关。

varlet确定变量的范围。对于var,变量的范围限定为其包含的函数(如果在所有函数之外,则为全局范围)。

let给出了变量块级范围,它可以比函数级范围更精细(即if / else语句的分支)。

如果声明属于全局范围,则letvar不会产生任何差异,因为范围是全局的。

两个声明都将创建全局变量,但let未在window对象上显式创建命名属性,如var所示。

有关详细信息,请参阅 this

同样来自 MDN

  

let允许您声明范围有限的变量   使用它的块,语句或表达式。这与此不同   var关键字,它全局定义变量,或者本地定义变量   整个函数,无论块范围如何。

而且,来自 ECMAScript spec. 本身:

  

letconst声明定义了作用域的变量   运行执行上下文的 LexicalEnvironment

     

var语句声明作用域的变量   执行上下文的 VariableEnvironment

这就是为什么全局声明的let变量无法通过window访问,就像全局声明的var变量一样。