关于const ,let,var
用{ }包括起来的区域成为块级作用域。
var
1,存在变量提升,即支持变量声明预解析。举个栗子:
console.log(a);//undefined
var a = 2;
console.log(b);//Uncaught ReferenceError: Cannot access 'b' before initialization
let b = 3;
上面的代码中a变量会预解析,解析如下:
var a;
console.log(a);
a = 2;
可以看到a变量的声明提升到了最前面。
2,不支持块级作用域。举个栗子:
{
var a = 2;
let b = 3;
}
console.log(a);//2
console.log(b);//Uncaught ReferenceError: b is not defined
显而易见{}对var声明的变量是不起作用的。
3,允许重复声明。举个栗子:
var a = 1;
var a = 2;
console.log(a);//2
{
let b = 1;
let b = 2;
//Uncaught SyntaxError: Identifier 'b' has already been declared
}
块级作用域内使用let声明的变量声明多次会报错重复声明。而var则会覆盖。
let
1,不支持变量提升,即不支持变量声明预解析,只能先声明后使用;
2,支持块级作用域
3,不允许重复声明
const。这个常量声明
1,不支持变量提升,即不支持变量声明预解析,只能先声明后使用;
2,支持块级作用域
3,不允许重复声明
4,与let特性不一致的一点:必须初始化,且不允许修改
举个栗子:
const a ;
//Uncaught SyntaxError: Missing initializer in const declaration
可以去翻译一下:const声明丢失初始化。
再来一个栗子:
const a = 2;
a =3;
//Uncaught TypeError: Assignment to constant variable.
上面的代码中console都不用写,因为执行不到下面这一步就会报错。
以上就是对JS中声明变量和常量声明方式的区别。希望对大家有所帮助。
网友评论