JavaScript var、let及const简单理解

1.var声明

1)作用域:函数作用域(只要是在函数内,var声明的变量就都有效)
2)可以重复声明同一变量
3)var可以声明提升:(以下代码打印结果一致),所谓的“提升”(hoist),也就是把所有变量声明都拉到函数作用域的顶部

function foo() { 
 console.log(age); 
 var age = 26; 
}
function foo() { 
 var age; 
 console.log(age); 
 age = 26; 
}

4)var声明的全局变量会成为window对象的属性

var name = 'Matt'; 
console.log(window.name); // 'Matt'

2.let声明

1)作用域:块级作用域(只在一个代码块中才有效)
2)不可重复声明同一变量
3)不会出现声明提升,相反会出现暂时性死区(即不可先使用再声明)
4)let声明的全局变量不会成为window对象的属性

let age = 26; 
console.log(window.age); // undefined

3.const声明

与let基本类似,但是const声明是需要同时初始化变量,且修改此变量会报错

const age = 26; 
age = 36; // TypeError: 给常量赋值

总结

区别:

function test(){
    if(true){
          var a = 1;
          let name = 'aaa'
          console.log(name) // aaa
          console.log(a) // 1
    }
    console.log(name)  // ReferenceError: name 没有定义
    console.log(a) // 1
}
//console.log(a) // ReferenceError: name 没有定义

var声明的变量a在test()函数内都是有效值,但在函数外就属于未定义;let/const声明的变量只在if {}包含的代码块内有效,在代码块外就无效了(所以for循环使用let声明变量,又因为变量会自增,所以不能使用const,因为const声明的变量不能再修改)

使用环境:

1.不使用var:因为使用let/const可以让自己明确作用域等,可以提升质量代码
2.const优先,let次之:这样可以强制要求变量保持不变,也能发现自己不合法的赋值,只有确定变量会有修改才使用let,这样后期也好维护


版权声明:本文为qq_45601687原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。