var 被用于全局作用域时,他会创建一个新的全局变量作为全局对象(浏览器环境中的window对象)的属性。这意味着var可能会无意中覆盖一个已经存在的全局属性。
var RegExp = "hello";
console.log(window.RegExp);
如果在全局作用域中使用let或者const,会在全局作用域下创建一个新的绑定,但该绑定不会添加为全局对象的属性。用let和const不能覆盖全局变量,而只能覆盖它。
使用块级作用域最佳实践:默认使用const,只在确实需要改变变量的值时使用let。这样就可以在某种程度上实现代码的不可变,从而防止某些错误的产生。