ES6 基础学习一
在之前的内容学习中,已经学会了基础的 DOM操作 和 BOM操作 ,同时也认识了 对象 、函数 、事件 的基本概念和用法,有兴趣的小伙伴可以❤️ 订阅APIs专栏免费学习 ❤️哟;那么接下来就是会结合目前市面上最流行的 ES6 对这些 基础的JS 进行更细化的学习;
说到 ES6 ,我想大家应该都有所耳闻;其实,它就是在2015年6月份迎来的 ECMAScript标准的第六版 的简称,之前的 ES5 都已经可以追溯到2009年了。厚积薄发的ES6可以称得上是内容变化最大的一个版本,它提供了许多的新语法和新特性,在很大程度上帮助开发者们处理更为复杂的业务逻辑,并且还能有效的 增强代码的可读性,减少代码的错误率;那么接下来本专栏 ES6基础学习 主要介绍的就是耳熟能详的 Promise 、箭头函数 、模板字符串 、以及 let 和 解构,当然也包括陌生的 代理、反射 、迭代器 和 生成器 等,欢迎大家订阅关注啦❤️❤️
那么今天主要会学习的内容是:
一、let和const
二、作用域
三、闭包
四、预解析
五、参数
六、箭头函数
文章目录
一、let和const
在 ES6 之前的版本中,用于声明变量的关键字只有var
,并且没有块作用域,只有函数作用域和全局作用域,但是在 ES6 中由于提出了let
和const
,就彻底改变了以往的局面;它们不仅可以用于声明变量,还可以将变量绑定到当前所处在的任意作用域中,如此一来就形成了块作用域。因此,可简单的了解到let
和const
这两关键字与var大体的区别:
- 不允许声明提升;
- 不允许重复声明;
- 不覆盖全局变量;
当然,这里也会细讲let
和const
:
1. let
其实,对于let
可以理解为是var
的升级版本,摒弃和纠正了var
的一些导致代码混乱的特性,从而使代码的逻辑更清晰,可维护性更高;
特性一:其无法实现变量提升;
代码样例:
{
let inner = true
console.log(inner) //true
}
console.log(inner) //抛出未定义的引用错误
特性二:存在临时死区;
临时死区:也叫暂时性死区,英文简写为 TDZ ;用let
和const
声明的变量,在声明之前是都会被放到 TDZ 中的,如果对于这些变量未赋值便访问的话,就会产生运行错误;
特性三:不允许重复声明;
当然,这里有一个前置条件:就是只有在相同的作用域时,才不允许同一个变量的重复声明;,这完全是因为 ES6 引入了一个重复声明的检查机制,促使着避免项目开发的过程中存在的同名变量影响代码逻辑的情况;
特性四:不覆盖全局变量;
在使用var
在全局作用域中声明变量的时候,该变量不但会成为全局变量,而且还会成为全局对象,而在ES6中,针对这种情况影响函数封装导致不利于代码模块化的问题,规定了使用let
可将全局变量和全局对象断开练习;
代码样例:
var global = true
var Math = true
console.log(window.global)// true
console.log(window.Math)// true
let whole = true
let Math = true
console.log(window.whole)//undefined
console.log(window.Math)//Math对象
2. const
对于const
来说,它不但具有let所具有的四大特性,它自己本身也有一个很重要的特性:声明常量 ;
不过,此处需要强调的一点就是,const
限制的其实是变量和内存地址之间的绑定,也就是说:
- 如果是基本类型(如布尔值、数字等)的变量,那么对应的内存地址中保存的就是值,不可更改;
- 如果是引用类型(如对象)的变量,那么对应的内存地址中保存的就是指向实际数据的一个指针,可以修改其内部的属性或方法;
⭐注意:
const
在声明时必须初始化(即赋值),并且在设定后,其值无法再改变;
二、作用域
基础概念: 作用域(scope)规定了变量能够被访问的 “范围” ,离开了这个 “范围” ,变量便不能被访问了,作用域通常也被分为 全局作用域 和 局部作用域 ;
其中,局部作用域 又分为 函数作用域 和 块作用域,具体如图所示: