var a = 0; // 1
let a = 0; // 1.1 (new with ES2015)
const a = 0; // 1.2 (new with ES2015)
a = 0; // 2
window.a = 0; // 3
this.a = 0; // 4
这些声明解释了
# 1 var a = 0;
这将创建一个全局变量,它也是< em >全局对象< / em >的属性,我们在浏览器中以window的形式访问它(或在非严格代码中通过this的全局作用域访问)。与其他一些属性不同,该属性不能通过delete删除。
在规范术语中,它为全球环境< em > < / em >在/a> . object 环境记录 . object 隐式< em > < / em >上创建一个属性。因为它是一个普通的属性,所以您可以删除它。我建议不这样做,它可能对以后阅读你的代码的人不清楚。如果你使用ES5的严格模式,这样做(分配给一个不存在的变量)是一个错误。这是使用严格模式的原因之一。