【问题标题】:Only logging NaN, although variables are declared and initialized仅记录 NaN,尽管变量已声明和初始化
【发布时间】:2021-12-23 18:43:54
【问题描述】:

我很抱歉这个幼稚的问题。我有这个简单的计时器,我不能百分百确定这里出了什么问题。我想显示一个像 7 : 10 : 20 这样的数字。

let running = false,
    showClock = false,
    time

let h, m, s
function timer() {
    s = s + 1
    m = Math.floor(s / 60)
    h = Math.floor(h / 60)
    time = `${h} : ${m} : ${s}`
    console.log(time)
}

function runClock() {

    running = !running
    showClock = !showClock
    let id
    if (running) {
        id = setInterval(timer, 1000)
    } else {
        clearInterval(id)
    }
}

我将 runClockfunction 附加到 onClick 方法并希望记录时间。但它只记录 NaN : NaN : NaN ,其次它没有停止。有人知道我做错了什么吗?

【问题讨论】:

  • 你对s = undefined + 1;有什么期望?
  • 我应该在timer函数中初始化s吗?
  • 你应该在某个地方初始化它。在您的代码中 s 未初始化。你可以用s = (s ?? 0) + 1;修复它
  • 不,它不会初始化任何东西。它声明了3个变量,所有3个变量都包含undefined

标签: javascript setinterval


【解决方案1】:

s 未初始化。您正在尝试将 1 添加到未定义,这将导致 NaN

修复:初始化 s 之前。

【讨论】:

  • 非常感谢!但是在函数外初始化s还不够吗?
  • 嗯,初始化我的意思是实际上为它分配一个值。您需要将其设置为某个值,否则您无法对其进行数学运算。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多