递归函数仅触发一次

时间:2017-01-26 22:25:06

标签: javascript recursion

在下面的函数中,我不明白为什么计数器函数只触发一次(数字上升一个增量,我希望它计算到homeFigTwo)。

function effectFour() {
  var homeFigOne = parseFloat($('.home .figure').text());
  var homeFigTwo = 23.99;
  var plusFigOne = parseFloat($('.home-plus .figure').text());
  var plusFigTwo = 28.49;
  var homeInc = homeFigOne < homeFigTwo ? .01 : -.01;
  var plusInc = plusFigOne < plusFigTwo ? .01 : -.01;

  function counterOne(){
    if (homeFigOne === homeFigTwo){
      return
    }else{
      homeFigOne = (homeFigOne + homeInc).toFixed(2);
      $('.home .figure').text(homeFigOne);
      window.setTimeout(counterOne, 100);
    }
  }
  counterOne();
}

这可以在上下文中看到:http://codepen.io/timsig/pen/NdvBKN

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

toFixed()的返回值为

  

使用定点表示法表示给定数字的字符串。

这意味着第二次发生这种情况:

var surveys = require('./controllers/surveys');

module.exports = function (router) {
  //routes
  router.get('/surveys', surveys.get);
  router.get('/surveys/:id', surveys.getOne);
  router.post('/surveys', surveys.create);
  router.put('/surveys', surveys.update);
  router.delete('/surveys', surveys.delete);

  return router
};

真正发生的事情是://Create a new survey create: function(req, res) { //this req.body and req.params are both empty Survey.create(req.body) .then( function(newSurvey) { res.status(200).json(newSurvey); }) .catch( function(error) { res.status(500).json(error); }) }, 实际上并不拥有homeFigOne = (homeFigOne + homeInc).toFixed(2); 方法,因为整个句子就是这样。

所以你想要的是"16.00" = "16.00" + 0.01 homeFigOne的结果,因为只要你toFixed你再次将它设置为一个字符串。

parseFloat

答案 1 :(得分:1)

您的递归按预期工作,但在第二次调用时会引发错误。这是因为您使用RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule \/(.*\.html)$ https://%1/$1 [R=301,END] RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ https://%1 [R=301,END] #Don't include $1 RewriteCond %{SERVER_PORT} 80 RewriteRule \/(.*\.html)$ https://%{HTTP_HOST}/$1 [R=301,END] RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://%{HTTP_HOST} [L,R=301] #Don't include $1 RewriteEngine On RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} .*(domain.com)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,END] 转换为字符串。

所以它基本上是这样的:

  • 第一次通话:值为15.99 23.99(两个号码)
  • 第二个电话:价值是&#34; 16.00&#34; 23.99(一个字符串和一个数字)

由于没有为字符串定义homeFigOne方法,因此抛出异常。因为这在匿名函数中发生异步,所以你可能会。没有注意到。

所以我的建议是首先进行增量,只为你的html元素进行投射:

toFixed

编辑: +当您处理浮动时,最好使用&gt; =而不是===作为最终标准