Javascript 为什么这个条件在尖叫教程中被排除在外

Javascript 为什么这个条件在尖叫教程中被排除在外,javascript,screeps,Javascript,Screeps,我经常用Python编程,刚刚开始使用Screeps和Javascript 在本教程中,此代码用于将爬行移动到能源资源并将其捕获: if(creep.store.getFreeCapacity() > 0) { var sources = creep.room.find(FIND_SOURCES); if(creep.harvest(sources[0]) == ERR_NOT_IN_RANGE) { creep.moveTo(sou

我经常用Python编程,刚刚开始使用Screeps和Javascript

在本教程中,此代码用于将爬行移动到能源资源并将其捕获:

if(creep.store.getFreeCapacity() > 0) {
        var sources = creep.room.find(FIND_SOURCES);
        if(creep.harvest(sources[0]) == ERR_NOT_IN_RANGE) {
            creep.moveTo(sources[0]);
        }
    }
而爬行动物也会做到这一点。然而,根据我的直觉,爬行动物不应该开始收割,因为它只被告知要移动到那里。这是Screep中对象定义方式的独特之处,还是我对javascript的误解

我还尝试在不使用if语句的情况下将爬行移到源代码,以检查它是否会自动捕获,但它没有这样做


提前感谢

收获代码也可以分离,而不是放在一行中。也许这会让你明白

if(creep.harvest(sources[0]) == ERR_NOT_IN_RANGE) {
    creep.moveTo(sources[0]);
}
这一部分告诉爬行到收获,只有在这之后才能评估收获的结果。表示该方法返回一个可以检查的常量结果

将此代码稍微分开一点,它看起来如下所示:

let harvestResult = creep.harvest(sources[0]);
if (harvestResult == ERR_NOT_IN_RANGE) {
    creep.moveTo(sources[0]);
}

现在更清楚的是,方法总是在之后被调用和求值。

这段代码是在某种循环中吗?我在这里猜测,但似乎若爬行动物不在收割范围内,它就会移动到那个里。然后,如果代码如果再次运行-
screw.harvest(sources[0])
将不等于超出范围,因为爬行移动到它,所以爬行将开始捕获。是的,它是在一个恒定循环中运行的。screw.harvest(sources[0])==ERR\u NOT\u IN\u范围将在某一点返回False。但是为什么它要执行screw.harvest(sources[0]),它只会评估为False,在我看来什么都不会发生。你是对的,我测试了它,但没有看到它的代码,所以我猜测在某个时候,
screw.harvest
将启动捕获操作,只有在没有错误的情况下。如果有错误,它将返回错误,而不是执行捕获操作。