Var ,let,const的异同:
Js的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据(变量只是一个用来保存值占位符而已)。
var:
var操作符定义的变量将成为定义该变量的作用域中的局部变量。
注意:省略var可以定义全局变量,但是我们不推荐这种能够用法,应为在局部作用域中定义全局变量是很难维护的,而且有意的省略var操作符,也会由于相应的变量不会马上有定义而导致不必要的混乱。况且在严格模式下,给未经声明的变量赋值会抛出错误。
Let :
1. let声明的代码,只在let声明的代码块内有效,如果在代码块调用会报错。
{
let a=5;
var b=6;
}
console.log(a);//a会报错
console.log(b);
只在代码块内有效,比较适合于for循环,这样不会造成内存的泄露。
2. 不存在变量提升。变量一定在声明之后使用,否则会报错。
console.log(typeof a);
let a;//会报错
注:因为不存在变量提升 typeof a 现在不是100%正确的方法了
3. 暂时性死缓:只要块级作用域内存在let命令,他所声明的变量就绑定在这个块级作用域内,不受外部的影响。(如果块级作用域内存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错)。
4. 不允许重复声明变量。在一个区域块内,不允许重复声明一个变量。
{
let a=1;//报错
var a=2;
}
Const
Const的用法与let类似
不同之处就在于:const声明一个只读的常量,常量值一旦声明,就不允许改变。一旦声明就必须初始化。不能留在以后再初始化,否则会报错。
Let 解决的问题:
1为javaScript增加了块级作用域(立即执行函数不在必要了)。
2.用于循环计数,防止了变量泄露
2,内层变量可能会覆盖外层变量。