2016-12-02 6 views
1

이것은이 웹 사이트에서 물어 보는 첫 번째 질문 중 하나입니다. 잘못된 방향으로 접근하는지 알려주세요.setInterval()을 사용하면 "if"에서 나이가 어떻게 증가합니까?

어쨌든, 내 obj (dog)를 만들었습니다. javascript의 setInterval 기능을 사용하여 나이 (5 세)부터 시작하여 개가 나이를 계산하는 "live"함수가 있습니다. 따라서 "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

증가량은 인라인으로 발생하기 때문에 조금 혼란 스럽습니다. 나는 간단합니다 : 각의 첫 번째 라인은 단지 다른 방법으로 this.age에 1을 추가

// 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에 올바른 값이 저장되고 timer에 의해 사용됩니다.

+0

명확히하기 위해 할당 연산자'='는 실제로 할당 된 값을 반환하므로 표현식 자체로 사용할 수 있습니다. –

+0

아하 나는 그것을 천천히 이해하기 시작했다고 생각한다. 나는 "var"이 호출 된 후에 무언가를 보는 것이 처음이라 생각합니다. 예를 들어 주셔서 정말 고마워요. 실제로 그것을 작성하는 "영리한"방법을 정리했습니다. – yunjae123