使用 setInterval(),年龄如何在 "if" 上升?

Using the setInterval(), how does the age go up at "if"?

这是我在这个网站上要问的第一个问题,如果我的处理方式有误,请告诉我。

无论如何,在我创建的对象 (dog) 中,我有一个 "live" 函数,它通过使用 [=29= 的 setInterval 功能从年龄 (5) 开始计算我的狗的年龄].因此,通过键入 "dog.live()" 调用函数将继续执行函数的 "if" 部分,直到狗的年龄达到 15 岁,然后它将继续执行函数的 "else" 部分通过告诉你狗已经死了多长时间。

var dog = {
  age : 5, 
  live : function() {

    setInterval(function() {
      var timer = this.age += 1;

      if (this.age < 15) {
        console.log("Dog lives another day at age " + this.age);
      } else {
        console.log("Dog has been dead for " + (timer - 15) + " years");
      }
    }.bind(dog), 1000);
  }
}

dog.live();

"Dog lives another day at age 6"
"Dog lives another day at age 7"
...
"Dog has been dead for 0 years"
"Dog has been dead for 1 years"

现在,我了解了如何在 setInterval 函数的 "else" 部分使用 "timer" 变量增加年龄。 但是,我对函数的 "if" 部分如何告诉狗的年龄如何自增感到困惑?据我所知,它不会自行递增,因为 "var timer = this.age += 1;" 只是声明一个变量,它本身没有执行任何操作。 我想知道狗的年龄在执行函数的 "if" 端时是如何增加的。

再次强调,如果我以错误的方式问这个问题,或者不允许这样的问题,请随时告诉我,我会进一步尝试改进我未来的问题,谢谢!

增量有点令人困惑,因为它发生在行内。我会简化:

// Version 1
var timer = this.age += 1;

// Simpler 1
this.age += 1; // Could also use ++this.age; or this.age++;
var timer = this.age;

// Simpler 2
this.age = this.age + 1;
var timer = this.age;

每一行的第一行只是以不同的方式将 this.age 加 1。

上面的代码片段都是做同样的事情,第一个只是"clever"的写法。它的工作原理是因为评估顺序,所以首先评估 this.age += 1,这意味着正确的值存储在 this.age 中,然后由 timer 使用。