作用域不同
let的作用域制作用于当前代码块
{
var str1 = "刘能";
let str2 = "赵四";
}
console.log(str1);//undefined
console.log(str2);//str is not defined
- let就会报错。因为var作用的是函数作用域,let作用的是块级作用域。
- 块级作用域:即在{}花括号内的域,由{ }包括,比如if{}块、for(){}块。
- 函数级作用域:变量在声明它们的函数体以及这个函数体嵌套的任意函数体都是有定义的
- 暂时性死区:全局的作用域、函数作用域,是没有块级作用域的。
let的作用域不会被提升
- var提升了作用域
{
console.log(str);//undefined
var str = "刘能";
}
相当于
{
var str ;
console.log(str);//undefined
str = "刘能";
}
let会直接报错
{
console.log(str);//str is not defined
let str = "刘能";
}
let在相同的作用域下不能声明相同的变量
{
var str = "刘能";
var str = "赵四";
console.log(str);//赵四
}
{
let str = "刘能";
let str = "赵四";
console.log(str);//Identifier 'str' has already been declared
}
let会覆盖前面的变量,而let不允许声明相同变量,会报错
网友评论