在ES6的标准下,声明变量有6中方式:分别是var 、function 、let 、const 、class 、import,其中var 、function 是es5标准下声明变量的两种方式。该篇主要介绍一下let const声明变量时的注意事项及其特性:
1、let声明变量(块级作用域)
(a)、用法与var声明变量类似,只是其声明变量的作用域在let所在的代码块中。在for循环中尤其明显。
for(var i=0;i<5;i++){
//dosomething
}
console.log(i);//5
for(let i=0;i<5;i++){
//dosomething
}
console.log(i);//i is not defined
(b)、不存在变量提升,在es5下使用var 声明变量存在变量声明提前的情况。
console.log(name);//undefined
var name = "张三";
console.log(age);//报错ReferenceError
let age = 18;
(c)、只要块级作用域中存在let命令,其块级作用域中的变量就受外界同名变量的影响,而且在有let声明的变量中,必须先声明在使用;
var age = 18;
if(true){
age =19;//报错
let age;
}
只能这么使用:
if(true){
let age;
age=18;
}
(d)、在相同的作用域中不能有同名的变量存在。不论其中有一个变量是用var声明的还是在函数中传入的。
(e)、块级作用域可以嵌套,但是外层的作用域无法访问内层作用域的变量。
{{{
{let age=18;}
console.log(age);//报错
}}}
2、const声明变量(块级作用域)
const声明变量其实与let声明变量是没有什么太大的区别,主要的区别是:
const声明的是一个只读常量,修改常量值会报错。实际上不是const的值不能改变,而是变量指向内存的那个地址不能改变。
const声明的常量,必须在一开始就初始化,不能等到后面在赋值。