2016-12-02 23 views
1

これはこのウェブサイトで私の最初の質問の一つですので、間違った方法に近づいているかどうか教えてください。setInterval()を使用すると、年齢はどのように "if"に上がりますか?

私のobjには、(犬)を作成したことがあります。私は、JavaScript()のsetInterval機能を使用して、年齢(5)から犬の年齢をカウントする「ライブ」関数を持っています。 "dog.live()"とタイプして関数を呼び出すと、犬の年齢が15になるまで、関数の "if"側を実行し、関数の "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内部機能の「他」の部分で、それは「タイマー」変数を使用して年齢をインクリメントする方法、理解しています。 しかし、私は、犬の年齢を示す関数の "if"部分がどのように増加するのか、困惑していますか?私が知る限り、 "var timer = this.age + = 1;"のために単独では増えません。変数を宣言しているだけで、何も実行していません。 私は、犬の年齢が機能の「if」側を実行している間にどのように増加するのか知りたいです。

また、この質問に間違ったやり方がある場合や、このような質問が許可されない場合は、私にお知らせください。今後の質問をさらに進めていただきたいと思います。ありがとうございます。

+1

'+ ='は変数をインクリメントします。その行に '='が追加されているので混乱します... – deceze

+0

うーん、あなたが+ +変数をインクリメントすることによって何を意味するのか理解したいと思います。残念ながら私はまだ少し失われています。 – yunjae123

答えて

2

インラインで発生するため、増分は少し混乱します。私は簡素化されます:

// 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を加えています。

上記のコードスニペットはすべて同じことをしていますが、最初のコードスニペットはそれを書くための「賢い」方法です。これは、評価の順序がthis.age += 1であることが最初に評価されたために機能します。つまり、正しい値がthis.ageに格納され、次にtimerによって使用されます。

+0

明確にするために、代入演算子 '='は実際に割り当てられた値を返します。したがって、それ自体が式として使用できます。 –

+0

ああ、私はゆっくりとそれを理解し始めていると思う。私は、 "var"が呼び出されずに "var"が実行された後に何かを見ているのは初めてのことだと思います。例については本当にありがとう、それは本当にそれを書く "賢い"方法をクリアしました。 – yunjae123

関連する問題