一、区别
- var声明的变量
①没有块的概念,可以跨块访问,但不能跨函数访问;
②作用域在该语句所在的函数内,且存在变量提升现象;
(啥?你问我啥是块?像for、if等这些创建的{}
,都属于块作用域)
function bar(){
{
var a = 1
}
console.log(a)
}
bar() // 1
function bar(){
{
let a = 1
}
console.log(a)
}
bar() // ReferenceError: a is not defined
for(i = 1; i < 5; i++){
console.log(i);//1 2 3 4
}
console.log(i);//5
for(let j = 1; j < 5; j++){
console.log(j);//1 2 3 4
}
console.log(j);//ReferenceError: j is not defined 因为j只在for那个块里定义了
- let声明的变量
①只能在块作用域里访问,不可以跨块访问,更不能跨函数访问;
②作用域在该语句所在的代码块中,且不存在变量提升现象;
③let在相同的作用域下,不允许重复声明变量;
④存在暂时性死区,在变量声明之前是不能使用的,否则会报错;
- ①const用来定义常量,使用时必须初始化(即必须赋值,不赋值就会报错);
②和let一样只能在块作用域里访问,而且不能修改;
③const声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用,而且也是不能重复声明;
但是!!!
image.png
网友评论