使用var定义的,是一个全局变量,同时会在windows下创建一个对应的属性,但是不可以被delete掉。
var a = 1;
delete a; // false
不使用var定义的,只是在windows下创建一个属性,并不会在全局下创建变量,可以通过delete删除掉。
a = 1;
delete a; // true
所以严格来讲,关键字定义才是符合ECMA规范,而之所以不使用var也可以,只是因为宿主环境提供了这个条件。
es6尽量祛除windows这个恶心人的东西,所以let const定义的都不会在windows下创建同名属性。