
自ES2015发布以来,已经有三年多的时间了,而我是从2016年年底才开始接触前端的工作。在工作中多多少少会了解一些es6的东西,今天突然翻起了一篇介绍ES6的文章,是阮一峰写的博客。看了一下关于变量声明的介绍,他写的非常好,介绍的很全面,最起码我是这样认为的。这里我就不再赘述了。
我今天要写的就是总结一下ES6——Let 的相关知识点,仅供参考。由于个人能力有限,如有不当之处请大家留言指正。至于更详细的内容,还请参看阮大神的博客(http://es6.ruanyifeng.com/#docs/intro)。
1、所有用Let来声明的变量,没有变量提升的问题,它的使用范围只在其所在的代码块中有效。
2、父作用域与子作用域可以同时使用Let声明两个相同名称的变量。两者之间互不干扰。因为其所在的代码块不同。
3、子作用域可以直接使用父作用域Let声明的变量,而父作用域却不能使用子作用域Let声明的变量。(原因就是子作用域声明的变量无法提升为全局变量。)
4、同一代码块中不允许同时声明两个同名的变量。无论是用Var还是用Let都不可以。
// 报错
function func() {
let a = 10;
var a = 1;
}
// 报错
function func() {
let a = 10;
let a = 1;
}复制
5、直接使用已经声明但未曾赋值的变量,会报undefined
6、变量必须先声明,而后再使用。如果先使用变量,而后再去声明的话,就会报错,这在语法上被称为“暂时性死区”。
7、如果要在代码块中声明一个函数的话,最好使用函数表达式的方法。
如:Let fn = function ( ) { };
8、const
声明的变量不得改变值,这意味着,const
一旦声明变量,就必须立即初始化,不能留到以后赋值。
9、const 的用法注意事项和Let 基本相同;
10、const
实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。
11、复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const
只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。
const foo = {};
// 为 foo 添加一个属性,可以成功
foo.prop = 123;
foo.prop 123
// 将 foo 指向另一个对象,就会报错
foo = {}; // TypeError: "foo" is read-only复制
关于变量声明,就先总结这些吧。




