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版权协议,转载请附上原文出处链接和本声明。