从前有匹马叫代码
心若没有栖息的地方,到哪里都是流浪

箭头函数可以使我们的代码更加简洁,如下:

var sum = (a,b) => a+b;

JavaScript 充满了我们需要编写在其他地方执行的小函数的情况。

例如:

  • arr.forEach(func) —— forEach 对每个数组元素都执行 func 。
  • setTimeout(func) —— func 由内建调度器执行。

……还有更多。

JavaScript 的精髓在于创建一个函数并将其传递到某个地方。 在这样的函数中,我们通常不想离开当前上下文。这就是箭头函数的主战场啦。

箭头函数没有 this 。如果访问 this ,则会从外 部获取。

const group = {
  title: "Our Group",
  students: ["John", "Pete", "Alice"],

  showList() {
    this.students.forEach((student) => console.log(`${this.title}:${student}`));
  },
};

group.showList();

如何使用普通函数则会出现错误,原因如下:

this指向错误,因为函数调用的上下文并非是group

 

⚠ 不能对箭头函数进行 new 操作 不具有 this 自然也就意味着另一个限制:箭头函数不能用作构造器(constructor)。不能用 new 调用它们。

—《现代JavaScript教程》

箭头函数没有 “arguments”

当我们需要使用当前的 this 和 arguments 转发一个调用时,这对装饰器(decorators)来说 非常有用

function defer(f,ms) {
    return function () {
        setTimeout(()=>f.apply(this,arguments),ms);
    }
}
function sayHi(who) {
    console.log(`Hello ${who}`);
}

const sayHiDeferred = defer(sayHi,2000);
sayHiDeferred('Peng');

如何使用普通函数的话,则需要如下这样:

function defer (f,ms) {
    return function(...args) {
        const ctx = this;
        setTimeout(function() {
            return f.apply(ctx,args);
        },ms);
    }
}

箭头函数总结:

  • 没有 this
  • 没有 arguments
  • 不能使用 new 进行调用
  • 它们也没有 super (在下一篇类继承中说明)

 

posted on 2021-02-14 16:33  从前有匹马叫代码  阅读(235)  评论(0编辑  收藏  举报