Javascript 我的功能不是';t返回

Javascript 我的功能不是';t返回,javascript,canvas,return,Javascript,Canvas,Return,哦!当条件满足时,我的函数不会返回(退出) var arrowReady = false; var arrowImage = new Image(); var deg = 0; arrowImage.onload = function () { arrowReady = true; function moveArrow() { setInterval(function() { ctx1.save(); deg++;

哦!当条件满足时,我的函数不会返回(退出)

var arrowReady = false;
var arrowImage = new Image();
var deg = 0;
arrowImage.onload = function () {
    arrowReady = true;
    function moveArrow() {
        setInterval(function() {
            ctx1.save();
            deg++;
            ctx1.rotate(deg * Math.PI / 180);
            // Here is  ^  the amount of degrees it turns.
            ctx1.clearRect(300, 200, 52, 310);
            ctx1.drawImage(arrowImage, 300, 100, 42, 300);
            ctx1.restore();
        }, 100);

        if (deg == 40) return;

    }
}

根据我的理解,当deg=40时,功能应该停止。但事实并非如此。有什么建议吗?

我不是JavaScript程序员,但您不需要指定要返回的值吗


示例
if(deg==40)返回deg

这里出现了棘手的javascript<代码>移动箭头
仅在文档加载时调用一次。返回或不返回都不会阻止您的间歇跑

您需要保存对间隔的引用:

var interval = setInterval(...
然后在匿名
setInterval
函数中,当
deg==40
时,您将希望
clearInterval(interval)
停止运行

试试这个:

var arrowReady = false;
var arrowImage = new Image();
var deg = 0;
arrowImage.onload = function () {
    arrowReady = true;
    function moveArrow() {
        var interval = setInterval(function() {
            if (deg == 40) {
              clearInterval(interval);
              return;
            }
            ctx1.save();
            deg++;
            ctx1.rotate(deg * Math.PI / 180);
            // Here is  ^  the amount of degrees it turns.
            ctx1.clearRect(300, 200, 52, 310);
            ctx1.drawImage(arrowImage, 300, 100, 42, 300);
            ctx1.restore();
        }, 100);

    }
}

现在还不清楚最后一个条件应该做什么。之后没有任何内容,因此函数将在那里停止执行。如果无论发生什么情况,函数调用都在这里结束,那么如果
deg==40
又有什么关系呢

更重要的是,我确信,这个函数实际上并没有改变
deg
的值。因此,
deg
在该行永远不会等于
40
。您正在做的是排队等待另一个函数在稍后时间(100毫秒?)运行。该函数排队后,控件立即转到
if
语句(在其他函数运行之前)


因此,在执行
if
语句后,将在一个完全不同的函数范围内修改
deg

deg==40
时,是否要在setInterval中停止函数?是的,这是计划。我明白了,@Alex Mcp的回答起作用了。在这种情况下,关闭魔法会起作用吗?这将需要捕获
interval
作为引用,因为我相信在
setInterval
返回之前它不会初始化。不,这里不需要。