共计 818 个字符,预计需要花费 3 分钟才能阅读完成。
在 ES2018 中,函数曾经是一个很简单的体系了,整顿如下。
- 第一种,一般函数:用 function 关键字定义的函数。
- 第二种,箭头函数:用 => 运算符定义的函数。
- 第三种,办法:在 class 中定义的函数。
- 第四种,生成器函数:用 function * 定义的函数。
- 第五种,类:用 class 定义的类,实际上也是函数。
- 第六 / 七 / 八种,异步函数:一般函数、箭头函数和生成器函数加上 async 关键字。
key1: this 是执行上下文中很重要的一个组成部分。同一个函数调用形式不同,失去的 this 值也不同. 调用函数时应用的援用,决定了函数执行时刻的 this 值。
一般函数的 this 值由“调用它所应用的援用”决定,其中神秘就在于:咱们获取函数的表达式,它实际上返回的并非函数自身,而是一个 Reference 类型(记得咱们在类型一章讲过七种规范类型吗,正是其中之一)。Reference 类型由两局部组成:一个对象和一个属性值。不难理解 o.showThis 产生的 Reference 类型,即由对象 o 和属性“showThis”形成。
key2: 箭头函数和异步箭头函数,无论用什么援用来调用它,都不影响他的 this 值。因为,箭头函数没有 prototype (原型),所以箭头函数自身没有 this. 箭头函数没有本人的 this,箭头函数的 this 指向在定义(留神:是定义时,不是调用时)的时候继承自外层第一个一般函数的 this
key3: call/apply/bind 无奈扭转箭头函数的 this 指向,但能够传参
key4: 箭头函数不绑定 arguments,取而代之用 rest 参数 … 代替 arguments 对象,来拜访箭头函数的参数列表
key5: new 的执行过程,咱们再来看一下:
以结构器的 prototype 属性(留神与公有字段 [[prototype]] 的辨别)为原型,创立新对象;
将 this 和调用参数传给结构器,执行;如果结构器返回的是对象,则返回,否则返回第一步创立的对象。
正文完