在Javascript中将参数传递给函数,但不声明它,它是如何工作的?
如果您没有太多时间,请告诉我“newTime”参数在下面的代码中从何处获得其值。 请看下面的代码以理解。我不明白这行:在Javascript中将参数传递给函数,但不声明它,它是如何工作的?,javascript,requestanimationframe,Javascript,Requestanimationframe,如果您没有太多时间,请告诉我“newTime”参数在下面的代码中从何处获得其值。 请看下面的代码以理解。我不明白这行:requestAnimationFrame(newTime=>animate(newTime,time))是如何工作的。参数“newTime”从未声明过,我们也不会手动将值传递给它。 当我试图理解不同的数组方法时,也会出现同样的问题,通常在函数中传递并使用一个参数,但我始终不知道参数的值。例如,这个代码段'array1.map(x=>x*2);。我们永远不会通过“x”,也永远不知
requestAnimationFrame(newTime=>animate(newTime,time))
是如何工作的。参数“newTime”从未声明过,我们也不会手动将值传递给它。
当我试图理解不同的数组方法时,也会出现同样的问题,通常在函数中传递并使用一个参数,但我始终不知道参数的值。例如,这个代码段'array1.map(x=>x*2);。我们永远不会通过“x”,也永远不知道它的价值
代码如下:
let cat = document.querySelector("img");
let angle = Math.PI / 2;
function animate(time, lastTime) {
if (lastTime != null) {
angle += (time - lastTime) * 0.001;
}
cat.style.top = (Math.sin(angle) * 20) + "px";
cat.style.left = (Math.cos(angle) * 200) + "px";
requestAnimationFrame(newTime => animate(newTime, time));
}
requestAnimationFrame(animate);
您看到的是一个es6匿名函数(一些语言称这些lambda函数)声明
newTime
只是该匿名函数的命名参数
requestAnimationFrame(newTime => animate(newTime, time));
与
requestAnimationFrame(function(newTime){
animate(newTime, time);
});
这是一个箭头函数定义
newTime
是箭头函数的形式参数。调用函数时的实际值将是浏览器传递的时间戳,而不仅仅是“箭头函数魔术”;您对requestAnimationFrame(animate)
也有同样的功能——它在这里调用animate
函数,同时使用一个参数。我知道箭头函数。我来自C语言背景。只是不知道如果我们不声明newTime,也不手动传递newTime值,它是如何进入函数的,需要什么值?@MazharAli回调函数(箭头函数)传递给requestAnimationFrame
的,由requestAnimationFrame
内部调用,并在内部调用时传递参数。函数是中的一级对象JavaScript@MazharAli无论requestAnimationFrame
传递给它什么(即执行回调时的时间戳,以毫秒为单位),我想问的是“newTime”的值是什么。它尚未声明,我们也不会手动将其传递给函数。任何其他带参数的函数都会传入一些值。不必查看requestAnimationFrame
的源代码,我可以非常自信地告诉您,它将回调作为参数,并将变量传入该回调。该变量(在requestAnimationFrame()
中创建和定义)是newTime
是的,它将newTime作为变量传递给回调函数。但我不知道该变量的值是多少?假设他们不将该变量公开给任何共享范围的变量,或者不允许更多参数进入requestAnimationFrame()
,那么如果不编辑source@MazharAli你看过吗