一、新的变量声明方式 let/cons
与var不同,新的变量声明方式带来了一些不一样的特性,其中最重要的两个特性就是提供了块级作用域与不再具备变量提升。
若是对变量提升不怎么了解的话可以去参考我的其他文章 javascript预编译的过程 。
什么是块级作用域腻?
写在 “{}” 内的内容 都是块级作用域。
在es6之前,我们想保护一个变量怎么办,将其放在一个立即执行函数里面,写在局部作用域中。
这样写是不是挺麻烦的捏,多谢几个单词不花时间么?!
在ES6中,我们想保护一个变量 只要 写在花括号中就好了。
{
let a=10;
}
下面有两个例子:
{
let a= 20;
}
console.log(a);//a is not defined//写在块级作用域中的内容会被保护起来,所以会打印 a is not defined
而这个简单的例子,会被编译为:
{
let _a= 20;
}
console.log(a);//a is not defined
//ES5
console.log(a); //undefined
var a = 20;//在es5中var一个变量 会变量提升//如同//var a;//console.log(a); //从上向下顺序执行 当然会打印 undefined 的捏。//a=20
//ES6
console.log(a); //a is not defined
let a = 20;//变量不会提升 打印时当然是 a is not defined
当然,你的代码编译成为了ES5之后,仍然会存在变量提升,因此这一点只需要我们记住即可。
在实际使用中,也需要尽量避免使用变量提升的特性带来的负面影响。只有在面试题中,才会对变量提升不停的滥用。使用ES6,我们需要全面使用let/const替换var,那么什么时候用let,什么时候用const就成为了一个大家要熟练区分的一个知识点。
我们常常使用let来声明一个值会被改变的变量,而使用const来声明一个值不会被改变的变量,也可以称之为常量。当值为基础数据类型时,那么这里的值,就是指值本身。而当值对应的为引用数据类型时,那么我这里说的值,则表示指向该对象的引用。