ES6基础姿势-关于const,let,var

关于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中声明变量和常量声明方式的区别。希望对大家有所帮助。

你可能感兴趣的:(ES6基础姿势-关于const,let,var)