首页 小组 问答 话题 好文 素材 用户 唠叨 我的社区

[教程]JavaScript中的箭头函数

风轻yLv.1种子选手
2024-09-11 09:15:33
0
40

1:箭头函数出现的背景

1.1 简洁性,更紧凑的语法。
1.2 解决传统函数的 this 绑定问题。
1.3 函数的二义性问题。

2:从this绑定问题分析

传统函数中,this 的值是在运行时确定的,这导致了在回调函数中经常需要使用 bind 方法或者 var self = this; 的方式来绑定 this。箭头函数通过捕获其外部作用域的 this,解决了传统函数中 this 绑定的不确定性。
1.通过call或apply或bind调用,箭头函数会忽悠第一个参数

function regularFunction() {
    console.log(this.value);
}
const arrowFunction = () => {
    console.log(this.value);
};

const obj1 = { value: 1 };

regularFunction.call(obj1); // 1
arrowFunction.call(obj1); // undefined

regularFunction.apply(obj1); // 1
arrowFunction.apply(obj1); // undefined

const boundArrowFunction = arrowFunction.bind(obj1);
boundArrowFunction(); // undefined

2.不可以使yield(使用于生成器函数中)。其一是箭头函数是捕获外部作用域的this而生成器函数可能会有自己的this绑定,可以导致不一致的混淆,其二生成器函数使用 function* 关键字定义,并且可以使用 yield 关键字来在函数内部暂停和恢复执行。这种特殊的语法结构需要被设计成独立的函数类型,而箭头函数的简洁语法不包括这些生成器函数的特殊结构。

3:从函数的二义性分析。

在传统函数中,函数的含义通常是表意不明的,一个函数既可以作为普通函数直接调用,又可以当做构造函数使用。

  1. 无法通过new 关键字调用,也没有关于对象的一下信息,如super, new.target,prototype。

  2. 不支持arguments,作为历史遗留的问题,有Rest参数的替代就没必要支持了。其次箭头函数通过词法作用域捕获其外部上下文的变量,其中就有arguments(外层最近的非箭头函数的 arguments 对象(如果存在的话),或者是全局对象的arguments对象。)

风轻y
风轻y

41 天前

签名 :   40       0
评论
站长交流