我有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控制台中有错误
答案 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);