var的缺点
- 没有块级作用域,for循环里面定义的变量,for外面也能访问到
for(var i = 0 ; i< 10; i++){
...
}
console.log(i);
- var声明的变量或函数会成为全局对象的属性
let的优势
- 拥有块级作用域
- let声明的全局变量不是全局对象的属性
全局变量:在作用域内都可访问的变量
全局对象:可在任何地方使用的变量或者函数使用window.
3.形如for (let x…)的循环在每次迭代时都为x创建新的绑定。
4. 用let重定义会报错
let a = 'a';
let a = 'b';
Uncaught SyntaxError: Identifier ‘a’ has already been declared
const
- const用于定义常量
三种错误:
- 只定义不赋值
const a;
- 重复定义
const a = 'a';
const a = 'b';
- 重新赋值
const a = 'a';
a = 'b';
总结:let用于定义块内使用的变量,const用于定义常量。