微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有人可以解释JavaScript的反跳功能中的“ this”吗?

如何解决有人可以解释JavaScript的反跳功能中的“ this”吗?

使用此debounce函数

function debounce(fn,delay) {
    var timer
    return function () {
      var context = this
      var args = arguments
      clearTimeout(timer)
      timer = setTimeout(function () {
        fn.apply(context,args)
      },delay)
    }
  }

有人可以解释为什么我应该只使用fn.apply(context,args)而不是fn()吗?

我知道.apply将更改上下文,并且var context = this将使上下文始终与fn()中的上下文相同。我找不到使用fn()fn.apply(context,args)会得出不同结果的情况。

有人可以给我一个例子吗?

解决方法

请考虑以下课程:

class Foo {
  constructor () {
    this.a = 'a';
    this.bar = debounce(this.bar,500);
  }

  bar () {
    console.log(this.a);
  }
}

const foo = new Foo();
foo.bar();
foo.bar();
foo.bar();

那么记录了什么,何时记录了多少次?您将看到一次记录一个值,大约是在上次调用之后半秒。使用您发布的定义,您将看到a。如果省略上下文部分,则会看到undefined

function debounceWithoutCtx(fn,delay) {
    var timer
    return function (...args) {
      clearTimeout(timer)
      timer = setTimeout(function () {
        fn(...args)
      },delay)
    }
 }
  

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。