我是编程的新手,面对此功能:
function update(time = 0) {
console.log(time);
requestAnimationFrame(update);
};
update();
为什么在函数中声明参数“ time = 0”,但是在声明此函数时却不带参数呢?
requestAnimationFrame在什么时候将新值分配给可变时间?
答案 0 :(得分:1)
已将变量time
设置为默认值0。通常,功能参数的默认值为undefined
,但是当使用param=default_val
声明功能参数时,如果在不带参数的情况下调用函数,或者参数未定义,则参数将默认为default_val
。参见Javascript Default Function Parameters
。
传递给requestAnimationFrame
的回调函数只有一个参数,即被调用的时间。
第一次调用0
时时间为update
,因为它没有作为参数传递给requestAnimationFrame
。首次调用后,该函数将自身作为回调传递到requestAnimationFrame
,然后将使用update
参数调用time
函数,因此不会将其设置为0。
function update(time = 0) {
console.log('time:', time, 'elapsed time ms:', time-start);
if(time-start<=500){
requestAnimationFrame(update);
}
};
var start = performance.now();
update();
更好的编写此代码的方法是使用requestAnimationFrame
来调用update
而不是手动执行它。这样,第一次调用update
函数时,它将具有正确的时间值,而不是0(并且不需要update
函数的默认函数参数) 。
function update(time) {
console.log(time);
requestAnimationFrame(update);
};
requestAnimationFrame(update);
答案 1 :(得分:0)
如果您希望time
变量在动画运行时递增计数,则可以使用以下方法:
let time = 0;
function update() {
time++;
console.log(time);
requestAnimationFrame(update);
}
update();
这是此代码的JSFiddle demo。
所有requestAnimationFrame
所做的只是调用update()
函数来再次运行,因此每次运行time++
函数时,拥有update()
都会增加该值。如果在time
函数内声明update()
变量,它将永远不会递增,因为每次update()
函数运行时都会将其创建为新变量。
如果您想阅读requestAnimationFrame
,可以查看此documentation page。
希望这会有所帮助:)