【问题标题】:Javascript variable not incrementing over intervalJavascript变量不会在间隔内递增
【发布时间】:2012-03-23 00:12:22
【问题描述】:

我正在尝试每 1 秒增加一个值(在本例中为 UNIX 时间戳,但在这种情况下,我们关心的可能是任何旧整数),但它拒绝这样做(它只是保持一样)。

这是代码

// given integer starting point
var tsmin=1332449260;
setInterval(function(){
   tsmin=tsmin++;
   console.info(ts);
}, 1000);

【问题讨论】:

    标签: javascript setinterval unix-timestamp


    【解决方案1】:

    声明:

    tsmin = tsmin++;
    

    保证将“tsmin”永远保持相同的值。 ++ 运算符 after 变量意味着该表达式的值是增量 before 的值。 = 操作符的绑定不如++ 紧密,所以那里的流程是:

    1. 获取“tsmin”的值
    2. 增加“tsmin”
    3. 将“tsmin”设置为步骤 1 中的值。

    【讨论】:

      【解决方案2】:

      问题来自 ++tsmin 和 tsmin++ 的区别。

      ++tsmin 在执行下一步之前递增该值,而 tsmin++ 在执行下一步后递增该值。如果您将行更改为:

      tsmin = ++tsmin
      

      它会起作用,因为它现在在将其保存为新值之前会递增。然而,即使这个解决方案“有效”,你真正应该做的是:

      tsmin++
      

      如果你只是这样递增,则无需设置 tsmin。

      【讨论】:

      • 非常感谢!清晰的解释、良好的示例和最佳实践建议!
      【解决方案3】:

      你为什么不直接使用 tsmin++ 而不是使用 tsmin=tsmin++ 的副作用?

      【讨论】:

        【解决方案4】:
            setInterval(function(){
           tsmin+=1;
           console.info(tsmin);
        }, 1000);
        
        
        setInterval(function(){
           tsmin=++tsmin;
           console.info(tsmin);
        }, 1000);
        

        【讨论】:

          【解决方案5】:

          试试这个:

          var tsmin = 1332449260;
          setInterval(function() {
             console.info(tsmin);
             tsmin++;
          }, 1000);​
          

          这假设您希望在控制台中输出 1332449260 作为第一个值,如果您想从 1332449261 开始,请将 tsmin++; 移动到 console.info(tsmin); 之前。

          【讨论】:

            猜你喜欢
            • 2015-11-28
            • 2016-12-12
            • 2018-02-04
            • 2017-06-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多