## var JavaScript脚本都可以省略var。 但是,某些时候,日过我们要强调是新声明了一个变量,那就必须使用var了。 用var和不用var的区别: - 加var: 重新定义一个新的变量。 - 不加var: 代表赋值,它会判断如果这个变量存在就赋值,不存在就定义一个新变量(而且是window的属性(全局的)).变量搜索范围:首先看当前函数体内有没有局部变量,没有得话就到window中找,如果window中也没有就返回undefined > 特别注意:在一个函数体内定义一个变量,那它的作用域对整个函数体有效! ## let let是更完美的var - let声明的变量拥有块级作用域,let声明仍然保留了提升的特性,但不会盲目提升。 - let声明的全局变量不是全局对象的属性。不可以通过window.变量名的方式访问 - 形如for (let x…)的循环在每次迭代时都为x创建新的绑定 - let声明的变量直到控制流到达该变量被定义的代码行时才会被装载,所以在到达之前使用该变量会触发错误。 ## const 定义常量值,不可以重新赋值,但是如果值是一个对象,可以改变对象里的属性值 ```js const OBJ = {"a":1, "b":2}; OBJ.a = 3; OBJ = {};// 重新赋值,报错! console.log(OBJ.a); // 3 ```