【问题标题】:Immediately invoked function expression for setTimeout doesn't work立即调用 setTimeout 的函数表达式不起作用
【发布时间】:2018-05-03 08:17:40
【问题描述】:

我正在尝试将 setTimeout 包装在一个立即调用的函数表达式中,该表达式创建该函数,然后像上面一样再次调用自身,并自动启动循环:

这是参考:enter link description here

由于某种原因,它运行一次然后停止。

//Spaceship move
function spaceShipMove(spaceShipToMove){

    var randomY = Math.floor(Math.random());
    spaceShipToMove.style.webkitTransform = 'translate(-3000px, ' + randomY + 'px)';
}
  //Spaceship
    var spaceShipsList = createMultipleSpaceShips(500);
    for (var i = 0; i < spaceShipsList.length; i++){
        var aSpaceShip = spaceShipsList[i];
        app.dom.mainWrapper.appendChild(aSpaceShip);


        (function t() {
            setTimeout(function (spaceShipGo) {
                spaceShipMove(spaceShipGo);
            }, i * 300, aSpaceShip)
        })();

【问题讨论】:

  • 谢谢。我已经修改了。
  • 您真的需要将 setTimeout 包装在 IIFE 中吗?我的意思是,setTimeout 将在没有它的情况下运行
  • 我想要这个无限的时间
  • 您错过了在链接答案中使用 IIFE 的意义。您将函数命名为 t,但从不使用此名称。另外,您真的需要单独的超时/间隔吗?您几乎可以肯定一次只安排一个超时,并将循环放入其中。这样你就可以避免在那里通过太空船的整个问题,这是不容易解决的。

标签: javascript settimeout


【解决方案1】:

试试这个

for (var i = 0; i < spaceShipsList.length; i++){
 var aSpaceShip = spaceShipsList[i];
 app.dom.mainWrapper.appendChild(aSpaceShip);

 setTimeout(spaceShipMove.bind(null, aSpaceShip), i * 300)
}

【讨论】:

  • 谢谢,但它不起作用。它运行一次然后停止。
  • 它不会停止,它会一遍又一遍地移动同一个“太空船”
猜你喜欢
  • 1970-01-01
  • 2023-04-04
  • 2018-01-07
  • 1970-01-01
  • 2020-01-02
  • 2012-12-28
  • 2017-04-06
  • 1970-01-01
  • 2016-05-04
相关资源
最近更新 更多