实现函数的闭包和自调用

时间:2018-10-10 09:09:10

标签: javascript

在这种情况下,我试图在开始时分配开始时间,当我单击页面时,它应该返回我花费的时间,但我总是得到0。我不明白我可能去了哪里。需要您的帮助。

     var timeSpent = (function(){
        var time    = new Date();
        var timeRun = false,
            startTime = time.getTime();

        return function(){ // call this function by timeSpent()(); 
            return time.getTime() - startTime;
        }
    })();

    addEventListener("click", function(){
        console.log(timeSpent());
    })

3 个答案:

答案 0 :(得分:1)

您需要在内部函数中计算当前时间

var timeSpent = (function(){
    var time    = new Date();
    var timeRun = false,
        startTime = time.getTime();

    return function(){ // call this function by timeSpent()(); 
        return (new Date()).getTime() - startTime;
    }
})();

addEventListener("click", function(){
    console.log(timeSpent());
})

答案 1 :(得分:0)

time是一个日期。每次在其上调用getTime()时,您将获得相同的值。

因此startTimetime.getTime()将始终相同。

您需要用会获得当前时间的内容替换time.getTime() 在返回的函数内部(new Date()).getTime()

var timeSpent = (function() {
  var time = new Date();
  var timeRun = false,
    startTime = time.getTime();

  return function() { // call this function by timeSpent()(); 
    return (new Date()).getTime() - startTime;
  }
})();

addEventListener("click", function() {
  console.log(timeSpent());
})

答案 2 :(得分:0)

您的函数timeSpent()的评估为(您可以通过在控制台中登录该函数来对其进行检查)

return time.getTime() - startTime;

最初为startTime = time.getTime()。因此,以上return语句的计算结果为0。为了获取当前时间,您必须 致电new Date().getTime()

var timeSpent = (function(){
    var time    = new Date();
    var timeRun = false,
        startTime = time.getTime();

    return function(){ // call this function by timeSpent()(); 
        return new Date().getTime() - startTime;
    }
})();

addEventListener("click", function(){
    console.log(timeSpent());
})