Javascript 函数表达式参数未指定值,但具有值
我希望有人能解释下面的函数表达式是如何工作的。尚未为参数“p”赋值,但它在函数体中用于计算(定义“角度”和“尾部”变量),并在调用draw()时用作参数对象。当您逐步浏览代码时,您可以看到参数“p”确实有一个值(请参见附图)——但我不明白该值来自何处。请注意,在审查完整代码时,没有在其他任何地方注明“p” 将“p”登录到控制台时,您会看到以下值,这些值会随着应用程序的运行而不断增加: 下面是完整的函数表达式和函数调用:Javascript 函数表达式参数未指定值,但具有值,javascript,canvas,parameters,function-expression,Javascript,Canvas,Parameters,Function Expression,我希望有人能解释下面的函数表达式是如何工作的。尚未为参数“p”赋值,但它在函数体中用于计算(定义“角度”和“尾部”变量),并在调用draw()时用作参数对象。当您逐步浏览代码时,您可以看到参数“p”确实有一个值(请参见附图)——但我不明白该值来自何处。请注意,在审查完整代码时,没有在其他任何地方注明“p” 将“p”登录到控制台时,您会看到以下值,这些值会随着应用程序的运行而不断增加: 下面是完整的函数表达式和函数调用: var draw = function(p) { $.fillSty
var draw = function(p) {
$.fillStyle = "hsla(38,5%,12%,.90)";
$.fillRect(0, 0, w, h);
$.fillStyle = "hsla(38, 25%, 90%, 1)";
$.strokeStyle = "hsla(38, 25%, 90%, 1)";
for (var i = 0; i < numh; i++)
for (var j = 0; j < numw; j++) {
var diagnalW = j * spacing +
(i % 2 ? 0 : spacing / 2);
var diagnalH = i * spacing;
var arr = [position[0] - diagnalW,
position[1] - diagnalH
],
wave = Math.sqrt(arr[0] * arr[0] +
arr[1] * arr[1]),
arr = [arr[0] / wave, arr[1] / wave],
angle = 50 * (Math.cos(p / 360 - wave / 105) - 1);
$.beginPath();
$.arc(diagnalW + arr[0] * angle, diagnalH +
arr[1] * angle, 2.8, 0, 2 * Math.PI, false);
$.closePath();
$.fill();
for (var n = 0; n < 5; n++) {
var tail = 50 * (Math.cos((p - 50 * n) /
360 - wave / 105) - 1);
$.beginPath();
$.moveTo(diagnalW + arr[0] * angle, diagnalH +
arr[1] * angle);
$.lineWidth = 5 - n;
$.lineTo(diagnalW + arr[0] * tail, diagnalH + arr[1] * tail);
$.stroke()
}
}
};
var anim = function(p) {
window.requestAnimationFrame(anim);
draw(p);
};
anim();
var draw=函数(p){
$.fillStyle=“hsla(38,5%,12%,0.90)”;
$.fillRect(0,0,w,h)
$.fillStyle=“hsla(38,25%,90%,1)”
$.strokeStyle=“hsla(38,25%,90%,1)”;
对于(var i=0;i
除了“p”如何获得控制台中显示的值之外,我了解关于这段代码的所有内容。另外,如果不清楚,这是一个html5画布应用程序
(旁注:不,
$
在上面不是jQuery。这正是原始作者用于画布上下文对象的内容。)在第一次调用draw
时,p
将具有未定义的值,因为anim()
没有传递p
的值,而anim
则在调用draw
时使用p
之后,draw
由浏览器调用,而不是由该代码调用,因为它被用作的回调。浏览器将使用高分辨率计时器值调用它,这是您在p
中看到的第一次调用draw
,p
将具有未定义的值,因为anim()
不会传递p
的值,而anim
则在调用draw
时使用p
之后,draw
由浏览器调用,而不是由该代码调用,因为它被用作的回调。浏览器将使用高分辨率计时器值调用它,这是您在p
中看到的p
是的回调参数
一个参数,指定在下次重新绘制时更新动画时要调用的函数。回调只有一个参数a,它指示requestAnimationFrame
开始触发回调的当前时间(从中返回的时间)
p
是的回调参数
一个参数,指定在下次重新绘制时更新动画时要调用的函数。回调只有一个参数a,它指示requestAnimationFrame
开始触发回调的当前时间(从中返回的时间)
哦这很有道理。非常感谢你。很抱歉之前对我的帖子感到困惑。不幸的是,我不能对你的回答投赞成票,因为这是一个新的帐户,但你的回答太棒了。再次感谢@米歇尔:很高兴这有帮助!几分钟后,你可以接受一个答案(我的或尼娜的,或者如果有更好的答案被贴出来…)。再来一点,就行了!再次感谢!哦这很有道理。非常感谢你。很抱歉之前对我的帖子感到困惑。不幸的是,我不能对你的回答投赞成票,因为这是一个新的帐户,但你的回答太棒了。再次感谢@米歇尔:很高兴这有帮助!几分钟后,你可以接受一个答案(我的或尼娜的,或者如果有更好的答案被贴出来…)。再来一点,就行了!再次感谢!非常感谢你。这个答案与上面T.J.的答案一致。非常感谢,非常感谢。这个答案与上面T.J.的答案一致。非常感谢。