【问题标题】:! Logical Operator and Scope in JavaScript! JavaScript 中的逻辑运算符和作用域
【发布时间】:2018-02-26 13:57:44
【问题描述】:

我正在 Lynda.com 上进行 JavaScript 基础培训,我很难理解一个概念的逻辑。

我在下面有这段代码,它通过使用 setInterval 设置间隔来设置计时器以每千分之一秒运行一次。

var timerRunning = false;

function start() {
    let textEnteredLength = testArea.value.length;
    if (textEnteredLength === 0 && !timerRunning) { //textEnteredLength is 0 and timerRunning is false
        timerRunning = true;
        interval = setInterval(runTimer, 10); //runTimer every 10 milliseconds (thousandth of a second)
    }
}

基本上,我很困惑,因为在教程中,timerRunning 是一个全局变量,在代码顶部 (var timerRunning = false;) 设置为 false

因此,!timerRunning 不就意味着timerRunning 是真的吗?或者,是因为在逻辑上!timerRunning 意味着不是timerRunning AKA false,无论全局变量最初设置为什么?

编辑:

没关系...我不知何故误解了代码的逻辑,显然我需要多睡觉。出于某种原因,我在想var timerRunning = false 在 if 语句中设置 timerRunning 的值,因此,!timerRunning 会是真的,而timerRunning 真的只是意味着假,我们继续到 if 语句的内部,因为if 语句为真。

感谢您的帮助。

【问题讨论】:

  • clearInterval 也许?
  • 如果 timerRunning 为真,!timerRunning 为假...
  • 问题是关于timerRunning变量的逻辑,我认为标题需要更改,因为它具有误导性。我不知道最好的标题是什么..

标签: javascript


【解决方案1】:

!timerRunningfalse == timerRunning 类似,因为有感叹号。这在每种编程语言 AFAIK 中都有。在此处阅读更多信息:What does an exclamation mark before a function really mean

var timerRunning = false;

console.log('false ... ' + timerRunning);
console.log('true cause it is false ... ' + !timerRunning);

【讨论】:

    【解决方案2】:

    start 的第一次运行,timerRunningfalse,意思是 !timerRunningtrue。 结果是if-block 只运行一次,第一次调用start

    【讨论】:

      猜你喜欢
      • 2017-05-03
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-03
      • 1970-01-01
      • 2020-03-09
      相关资源
      最近更新 更多