【问题标题】:Why typeof callback become number?为什么 typeof 回调变成数字?
【发布时间】:2016-10-28 15:50:26
【问题描述】:

我的回调和requestAnimationFrame 有一个非常奇怪的问题。一次成功执行,但第二次回调变成了数字。

function TEST () {
    this.michou = "jean";
}

TEST.prototype.talk = function(fn) {
    window.requestAnimationFrame(this.talk.bind(this));
    alert(typeof fn); //type of callback
    fn();
};

var jean = new TEST();

jean.talk(function() {
    alert("hello");
});

如果您尝试此代码,您将在警报中看到“function”“hello”和“number”“number”。为什么callback的类型显示“数字”?

【问题讨论】:

    标签: javascript callback numbers typeof requestanimationframe


    【解决方案1】:

    当在动画帧中调用 .talk() 函数时,没有传递 fn 值(尽管传递了 something;见下文)。如果您更改代码,您可以修复它:

    TEST.prototype.talk = function(fn) {
      window.requestAnimationFrame(this.talk.bind(this, fn));
      alert(typeof fn); //type of callback
      fn();
    };
    

    如果在将函数绑定到对象引用时将fn 作为第二个参数传递,则将使用正确的this 值和参数调用该函数。

    您的代码看到的数值是浏览器传入动画帧回调的高分辨率时间戳。如果代码如上更改,它仍然会传递,但它将是第二个参数,而不是第一个。

    【讨论】:

      猜你喜欢
      • 2011-02-17
      • 2017-07-16
      • 2019-07-20
      • 2011-05-22
      • 2023-03-10
      • 2013-08-19
      • 1970-01-01
      相关资源
      最近更新 更多