JavaScript   发布时间:2022-04-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了异步Javascript递归大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我现在不知道如何在脑子里问这个问题,所以请耐心等待.我是异步编程的新手,我认为最好的学习方法是制作一个小的pavascript pong游戏.我开始使用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后完成了?或者这真的发现自己加载我的堆栈与不必要的激活记录?提前感谢您提供的任何专业知识.

最佳答案

不,射球很久以前就完成了,就在分配到球赛之后.但是,它的变量范围(角度,速度,球运动和父范围)确实存在,因为匿名函数使用它构建了一个闭包,并从外部(从调度程序)引用.并且该范围将在clearInterval调用之后收集垃圾,该调用删除了对它的引用.

不可以.通过setTimeout / seTinterval执行的每个函数都在自己的执行上下文中运行,并带有一个全新的调用堆栈.

大佬总结

以上是大佬教程为你收集整理的异步Javascript递归全部内容,希望文章能够帮你解决异步Javascript递归所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。