var
-
function show(){ var a = 1 } console.log(a,'外部') // a is not defined -
// 变量提升 function show(){ console.log(a) } var a = 1 show() // 1 -
function show(){ var a = 1 var a = 2 console.log(a) } show() //2 -
总结:1、 var定义的变量是整个封闭函数
2、变量提升,不论var 定义的变量在一个函数内部第几行,都会提升到作用域的最顶部
3、var 定义的变量可以变重复定义,下面定义的变量会覆盖上面定义的变量
let
-
let a = 1 function show(){ let a =2 console.log(a) } show() // 2 -
function show(){ let a =1 let a =2 console.log(a) } show() // Identifier 'a' has already been declared -
function show(){ console.log(a) let a = 1 } show() // Cannot access 'a' before initialization -
总结: 1、let 定义的变量不会变量提升
2、在同一个作用域内 ,不允许重复定义
const
-
const a =1 function show(){ a = 2 console.log(a) } show() // Cannot access 'a' before initialization
-
-
总结: 1、const 专门用来声明常量,
2、const 定义的基本类型常量不可改变,声明是必须初始化
3、不会变量提升,重复定义会报错,与let相同
不足之处请指出,共同进步