一、var 变量
- var声明作用域
使用var声明的变量会成为包含他的函数的局部变量,在一个函数内部定义一个变量,意味着函数退出是这个变量将被销毁
js function test() { var message = "hi"; // 局部变量 } test(); console.log(message); // 出错!
不使用var直接在函数内部赋值一个变量,这个变量将会变成全局变量,但是在严格模式下将会报错
- 变量提升 所有变量声明将会被拉到函数的顶部,声明前调用是没有问题的,反复多次在一个作用域内重复声明一个变量也是没有问题的
let声明
- let跟var的作用差不多,但是let是块作用域,而var是函数作用域
- let声明冗余实惠报错的
- let和var混用的声明冗余也是会报错的
- 暂时性死区
当块级作用域下存在
let声明的变量与var声明的变量z同名,块级作用域中的改变量使用的是或let声明的变量,同时,在声明该变量之前,块级作用域内改变量都是不可用的。 const也有暂时性死区 - 全局声明 var关键字在全局作用域下声明的变量会挂载到window上,而let不会
- let在全局作用下的条件声明是不被允许的
- let可以用于for循环,避免var导致的迭代变量异常问题
const声明
const和let大同小异,但是const声明的是常量