【发布时间】:2017-09-08 21:13:19
【问题描述】:
此查询与存储结构有关,但不了解let关键字的范围规则。
使用var关键字,a是window对象的一个属性(就像字典一样)
var a = 10;
console.log(window.a); // 10
console.log(window['a']) // 10
f是window对象的属性
function f(){}
console.log(window['f']) // function object
使用let关键字,b不是window字典的属性
let b = 20;
console.log(window.b); // undefined
我的理解是,在 JavaScript 代码中引入的任何 name(function/var/..) 都将是 windowdictionary(nested) 对象的属性(成员)。
编辑:
b 是谁的财产?
【问题讨论】:
-
我的理解是,在 JavaScript 代码中引入的任何名称(函数/var/..)都将是窗口字典(嵌套)对象的属性(成员)。 和, 那就是问题所在。这种说法是不正确的。请参阅下面的答案。
-
@ScottMarcus 在该屏幕截图中
b是谁的财产?查询已编辑 -
如下回答。
b属于全局范围。但是,由于使用let来声明b,它的作用域是一个具有全局作用域的特殊隐藏对象。您期望所有 Globals 都必须成为window的属性是不正确的,这就是您困惑的根源。
标签: javascript dictionary ecmascript-6