ES6简单介绍

ES6一些语法与个人思索

let和const

let声明变量
  1. let声明的变量不会挂在window中,不会造成全局变量的污染
  2. 新增了一个块级作用域{},以前只有函数作用域,全局作用域
  3. let是不允许重复声明
  4. let不会有声明提前(只是人为看到的效果,实际上是有声明提前,提前到临时性的死区中)
const声明常量
  1. 跟let的四个点一样:不能重复声明,不能声明提前
  2. 不允许被修改,不允许改变内存空间的地址
  3. const声明和赋值必须一次性完成,并且后期不允许改变存储空间的地址

因为let声明的变量不会挂在window上,且声明的值会形成独立的块级作用域,所以使用起来能节省浏览器的运行速度

	<button id="btn1">按钮一</button><button id="btn2">按钮二</button><script>function $(id) {return document.getElementById(id)}$('btn1').onclick = function() {for(var i = 0; i < 10; i ++){setTimeout(()=>{console.log(i);})}}$('btn2').onclick = function() {for(let i = 0; i < 10; i ++){setTimeout(()=>{console.log(i);})}}</script>

按钮一事件触发的效果:

在这里插入图片描述

按钮二事件触发的效果:

在这里插入图片描述

两者事件触发后的输出结果不一样是因为JS这门语言的 事件轮询机制 与var和let这两个关键字区别造成的

const声明的基本类型数据不会改变值,但是若声明的是引用类型数据,而在JS概念中,引用类型分地址与数据,const声明引用类型数据时虽然不会改变地址,但是引用数据里面存储的值还是可以改变的

Promise对象

ES6语法中为了让冗杂的回调地狱的结构变得更加直观便于人了解,于是便出现的Promise对象这个东西

语法

const p = new Promise(function(resolve,reject){resolve('成功');//reject('失败');
}).then(value => {console.log(value)
},reason => {console.log(reason)
}).then(value => {console.log(value)
},reason => {console.log(reason)
})...

then 方法返回的是一个promise对象,对象的状态由回调函数的执行结果决定

如果回调函数返回的是非promise类型的属性,状态是成功,返回值就是对象成功的值

Promise对象有两个特点:
①,对象的状态不受外界的影响,Promise有三种状态:Pending(进行中)、fulfilled(已成功)、rejected(失败),只用异步操作的结果可以决定当前是哪一种状态,其他任何操作都无法改变这个操作。
②.一旦状态改变之后就不会再改变。任何时候都可以得到这个结果。状态变化只有两种可能:从pending到fulfilled和从pending到rejected。只要改变就已经定型了。

Promise的缺点:
① 一旦创建就无法取消,一旦新建就会立即执行
② 如果不设置回调函数,它的内部错误就不会反映到外部。
③ 当处于pending状态时,无法判断进展到哪一阶段(刚开始还是快完成)。

简单来理解:Promise就是将判断和处理两步分开来写,所以我觉得Promise是同步的,依次执行

③ 当处于pending状态时,无法判断进展到哪一阶段(刚开始还是快完成)。

简单来理解:Promise就是将判断和处理两步分开来写,所以我觉得Promise是同步的,依次执行

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注