今、頭の中でグルグル回っている質問の仕方がわからないので、我慢してください。私は非同期プログラミングの初心者であり、学ぶための最良の方法は、小さな JavaScript ピンポン ゲームを作成することだと考えました。私は、shootball() 関数から始めて、別の div の周りで div をバウンスしました。私がこれを行った方法は、次のようなものでした:
function shootball(angle, speed){
angle = (angle/360.0)*2*Math.PI;
var ballmotion = setInterval(function(){
var nowx, nowy, minusY, plusX;
nowx = $("#ball").position().left;
nowy = $("#ball").position().top;
minusY = Math.sin(angle) * 4.0;
plusX = Math.cos(angle) * 4.0;
if(hitsWall(nowx+plusX, nowy-minusY)){
clearInterval(ballMotion);
shootball(newAngle(nowx+plusX, nowy-minusY), speed);
}
$("#ball").css("left", (nowx + plusX)).css("top", (nowy - minusY));
}, 10/speed);
}
私は大きな不必要な再帰の大ファンではありませんが、試してみたかっただけです。見よ、それは私が期待したとおりに機能する。しかし、プログラムの残りの部分を具体化し始めたとき、この再帰的な性質を避ける方法がないことに気づきました。だから私の質問: javascript は、clearInterval を呼び出した後に呼び出し元の「シュートボール」関数が本質的に終了したことを何らかの方法で認識しますか? それとも、不要なアクティベーション レコードでスタックに負荷がかかるのでしょうか? これが盛り上がる可能性のある専門知識を事前に感謝します。