通过运算符创建变量时let,我在全局对象中找不到它window。她在哪里?
let与 不同的是,脚本和函数的顶层var不会在全局对象上创建属性。例如:
var x = 'global_x';
let y = 'global_y';
console.log(this.x); // 'global_x'
console.log(this.y); // undefined
通过运算符创建变量时let,我在全局对象中找不到它window。她在哪里?
let与 不同的是,脚本和函数的顶层var不会在全局对象上创建属性。例如:
var x = 'global_x';
let y = 'global_y';
console.log(this.x); // 'global_x'
console.log(this.y); // undefined
哇,没那么简单。两者
let和var都是全球性的,是的,但是...全局范围是异构的,由声明性环境记录 (DER) 和对象环境记录 (OER)组成。
根据 ECMA 规范,在 OER 中只创建FunctionDeclarations、GeneratorDeclarations和VariableStatements,这就是
window.其余的 (
const和let) 在 DER 中。通常,
let和 都是var全局的,但var's 在 objectwindow中,而let's 在声明范围内,您无法触及。这类似于您无法从函数外部访问函数范围变量的情况。规范中的更多详细信息: