回调函数作为window.requestAnimationFrame()的参数

时间:2018-01-03 22:55:21

标签: javascript

我有js文件,我在使用requestAnimationFrame()。我知道这个论点应该是回调函数。我认为我的论点是回调函数,但错误出现在js控制台中:

  

TypeError:Window.requestAnimationFrame的参数1不是   对象

file.js:

function screen(){
     console.log("it works!")
}

function fun(word){
    if (word === 'tree'){
        screen()
    }
window.requestAnimationFrame(fun("tree"));

一切都很好。我在我的大型项目中使用它,一切都按照我的意愿运行,但我不知道为什么我在js控制台中有错误

2 个答案:

答案 0 :(得分:5)

您将执行fun函数的结果传递给requestAnimationFrame,这就是您收到错误的原因(因为它返回了未定义的内容)。

正确的方法:

function screen(){
     console.log("it works!")
}

function fun(word){
    if (word === 'tree'){
        screen()
    }
}
window.requestAnimationFrame(fun.bind(window, "tree"));

您可以在documentation找到有关bind的更多信息。

答案 1 :(得分:2)

处理此类事情的常用方法是将您的调用包含在匿名函数中fun("tree"),这将成为requestAnimationFrame可以使用的回调:

function screen(){
     console.log("it works!")
}

function fun(word){
    if (word === 'tree'){
        screen()
    }
}
window.requestAnimationFrame(function () { fun("tree"); });

这与您的代码的不同之处在于,您传递了使用参数" tree"调用fun函数的结果。由于fun没有返回任何结果未定义的内容。好像你做了

var x = fun("tree"); // x is undefined
window.requestAnimationFrame(x);