var
什么是var,它是js的一个关键字,它是用来声明一个变量,并可选地将其初始化为一个值。变量的初始化值可以是任何合法的表达式,默认值为 undefined。var如果在方法中声明,则为局部变量;如果在全局中声明,则为全局变量。
var变量声明总是在任意代码执行之前处理的,所以在代码中的任意位置声明变量总是等效于在代码开头声明。
console.log(a); //undefined
var a = 1;
console.log(a); // 1
// 可以隐式地将以上代码理解为:
var a
console.log(a); //因为声明了但没赋值所以是undefined
a = 1;
console.log(a);// 这里赋值然后输出的就是1
// var 是可以重命名赋值的 后面的会覆盖前面的
var a = 10
console.log(a);// 输出10
let
let是ES6新增的声明变量的关键字,跟var区别:
1.let声明的变量不会挂在window中,不会造成全局变量的污染
2.新增了一个块级作用域{},以前只有函数作用域,全局作用域
3.let是不允许重复声明
4.let不会有声明提前(只是人为看到的效果,实际上是有声明提前,提前到临时性的死区中)
就例如:
for (var i = 0; i < 10; i++) {
setTimeout(function() {
console.log(i); // 这里会输出10 个10
}, 0)
}
for (let i = 0; i < 10; i++) {
setTimeout(function() {
console.log(i); //这里依次输出0到9
}, 0)
}
const
const也是ES6新增的,是声明常量的,非常类似用 let 语句定义的变量。但常量的值是无法(通过重新赋值)改变的,也不能被重新声明。
1.不能重复声明,没有声明提前;
2.不允许被修改,不允许改变内存空间的地址
3.const声明和赋值必须一次性完成,并且后期不允许改变存储空间的地址