requestAnimationFrame中的javascript作用域

requestAnimationFrame中的javascript作用域,javascript,scope,requestanimationframe,Javascript,Scope,Requestanimationframe,我想为动画制作一个选择选项,这样无论选择什么类型,它都会显示在画布上。 因此,我将每个动画制作为一个“类”: 然后在主js中: var a = new animationA(); function setup() { a.init(); } function update(callback) { requestAnimationFrame(function () { update(callback); }); console.log(t

我想为动画制作一个选择选项,这样无论选择什么类型,它都会显示在画布上。 因此,我将每个动画制作为一个“类”:

然后在主js中:

var a = new animationA();

  function setup() {
    a.init();
  }

  function update(callback) {
    requestAnimationFrame(function () {
      update(callback);
    });
    console.log(this);
    callback();
  }

  setup();
  update(a.draw);
我发现更新(a.draw)中出现错误。它无法访问此行代码中的属性。 我想知道这是否是javascript作用域问题


谢谢。

在调用requestAnimationFrame之前,您需要创建一个对回调中要引用的上下文的引用,就像在普通事件回调中一样

Var that = this;

requestAnimationFrame(function(){

that.doSimething();

});

这与您使用的
requestAnimationFrame
函数无关。它是关于如何将a.draw传递给
update
的,它不是函数的范围,而是函数调用的
上下文。什么是
RequestAnimationFrame
?什么是
?requestAnimationFrame是一个在浏览器根据图形卡的刷新率更新屏幕时执行的函数。由于大多数显示器的工作频率为60Hz,因此该功能每16.6666ms启动一次。回调函数在函数激发时执行。由于屏幕实际刷新时会有变化,所以requestAnimationFrame并不总是16.6666ms,因此requestAnimationFrame比执行setInterval或setTimeout函数要高效得多。哦,这个函数称为
requestAnimationFrame
。谢谢你的更新!
Var that = this;

requestAnimationFrame(function(){

that.doSimething();

});