var
- var 声明变量会声明提升
- 声明提升
//原来代码(自己写的) console.log(age);//undefined var age = 26;
//声明提升后(自动转换的) var age; console.log(age);//undefined age = 26;
- 声明提升
- 可以反复多次声明同一个变量
这是变量提升导致他不会报错
var b = 1; var b = 2; var b = 3; console.log(b)//可以执行,不会报错
- var 是函数作用域生效
不用关键词定义就会全局生效
- var 在全局作用域中声明的变量会成为 window 对象的属性
var a = 1;
console.log(window.a)//1
let
- 声明变量不会声明提升
console.log(age);//会报错ReferenceError:(没有定义) var age = 26;
- 不能反复多次声明同一个变量
let没有变量提升,所以报错
let b = 1; let b = 2; let b = 3; console.log(b)//会报错SyntaxError(标识符 age 已经声明过了)
- let是块级作用域生效
花括号({})内的都是块级作用域
- let 在全局作用域中声明的变量不会成为 window 对象的属性
let b = 2; console.log(window.b)//undefined
const
基本和let差不多,也是块级作用域,没有声明提前;
- const 和let 唯一的区别是,const是定义常量的,一但定义不能修改