在 ECMAScript 5 及以下版本中,在脚本顶层使用
var
声明会变为全局变量,也就是说它们会成为全局对象 (window
在浏览器中的表示方式) 的属性。但在 ECMAScript 6 中,我们引入了模块化。模块化默认为严格模式,因此如果我们忘记使用 var
来声明变量,不会自动创建全局变量。但如果我在一个模块的顶层位置使用 var
声明变量,它是否会成为 window
对象的全局属性?那么如果我使用新添加到 ES6 中的 let
或 const
或其他声明形式呢?var foo = {};
console.log(window.foo === foo); // true or false?
let bar = {};
console.log(window.bar === bar); // what about this?