gpt4 book ai didi

javascript - 在声明时调用 Javascript 匿名函数是行不通的,稍后调用它会起作用

转载 作者:行者123 更新时间:2023-11-28 03:58:00 26 4
gpt4 key购买 nike

[已回答]

我正在为 html5 游戏测试浏览器的 fps。
我有这段代码:

var requestAnimationFrame = ( function() {
return window.requestAnimationFrame || //Chromium
window.webkitRequestAnimationFrame || //Webkit
window.mozRequestAnimationFrame || //Mozilla Geko
window.oRequestAnimationFrame || //Opera Presto
window.msRequestAnimationFrame || //IE Trident?
function(callback) { //Fallback function
window.setTimeout(callback, 1000/60);
}
})();

var hits = 0;
var last = new Date().getTime();

var step = (function(){
now = new Date().getTime();
hits += 1;
if( now - last >= 1000 ){
last += 1000;
console.log( "fps: "+ hits );
hits = 0;
}
requestAnimationFrame( step );
})();

它在 Chrome 上给出了以下错误:
Uncaught Error :TYPE_MISMATCH_ERR:DOM 异常 17
第 27 行:requestAnimationFrame( step );

W3 表示此错误是:如果对象的类型与关联到该对象的参数的预期类型不兼容。
但我实际上根本没有与 DOM 交互,除了 window

但是,如果我删除分配给 step 的匿名函数的调用括号,而只是声明该函数并在新的一行上输入:
步骤();

有效。
这是为什么?
两者不应该一样工作吗?

最佳答案

requestAnimationFrame 需要一个函数,但在您的代码中,step 不是函数,它是 undefined 因为您没有返回任何来自您的自调用函数的值(value)。

var step = (function(){
// this code is executed immediately,
// the return value is assigned to `step`
})();

如果去掉调用括号,那么 step 确实是一个函数。

请参阅@Martin 对此答案的评论。我指的是 stepundefined after 函数执行后,当然它也是 undefined 当您第一次调用该函数时。

关于javascript - 在声明时调用 Javascript 匿名函数是行不通的,稍后调用它会起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8583548/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com