>

0에서 9까지 숫자를 구할 수있는이 코드가 있습니다

var countup = {
    i: 0,
    startCount: function () {
        for(i = 0; i < 10; i++){
            console.log(i);
        }
    }
}
countup.startCount();

이제 1 초 간격으로 숫자를 출력 할 수 있어야합니다. 아래 코드를 시도하여 정의되지 않은 출력을 제공합니다.

var countup = {
    i: 0,
    startCount: function () {
        setInterval(function() {
            for(i = 0; i < 10; i++){
                console.log(i);
            }
        }, 1000)
    }
}
countup.startCount();

1 초 간격으로 원하는 숫자 0-9를 출력하도록 위의 코드를 편집하는 방법을 아는 사람이 있습니까?

감사합니다!

  • 답변 # 1

    let 사용   i 선언   setTimeout 를 사용하십시오.  console.log 카운터를 영원히 10 번만 호출해야하기 때문에 ..

    var countup = {
      startCount: function () {
        for(let i = 0; i < 10; i++){
           setTimeout(function() {
             console.log(i);
           }, i*1000)
         }
       }
    }
    countup.startCount();
    
    

  • 답변 # 2

    See the second and third snippets for better answers.

    setInterval 를 사용하여 이렇게 할 수 있습니다  그리고 clearInterval  카운트가 10에 도달하면 변수 i 에 액세스  카운트 업 개체에서 this.i 로 할 수 있습니다 :

    const countup = {
        i: 0,
        startCount: function() {
            const timer = setInterval(() => {
                console.log(this.i);
                if (++this.i === 10) {
                    clearInterval(timer);
                }
             }, 1000);
        }
    }
    countup.startCount();
    
    

    @ Hit-or-miss가 언급 한대로, this  정적 객체에는 사용하지 않아야합니다. prototype 를 사용하여 더 좋은 방법이 있습니다. .

    이것은 내부 카운트를 공유하지 않는 여러 카운터를 가질 수있게합니다.

    function Countup() {
      this.i = 0;
    }
    Countup.prototype = {
        constructor: Countup, // Good practice
        startCount: function() {
            const timer = setInterval(() => {
                console.log(this.i);
                if (++this.i === 10) {
                    clearInterval(timer);
                }
            }, 1000);
        }
    };
    const counter1 = new Countup();
    const counter2 = new Countup();
    counter1.startCount();
    counter2.startCount();
    
    

    또는자바 스크립트 클래스사용 :

    와이즈 비즈

    The arrow functions and classes are supported only in modern browsers.

    class Countup { constructor() { this.i = 0; } startCount() { const timer = setInterval(() => { console.log(this.i); if (++this.i === 10) { clearInterval(timer); } }, 1000); } }; const counter1 = new Countup(); const counter2 = new Countup(); counter1.startCount(); counter2.startCount();

관련 자료

  • 이전 javascript - Firebase 호스팅을 도메인에 연결 한 후 구성의 authDomain 또는 databaseURL이 변경됩니까?
  • 다음 mysql - 문자열 대신 목록을 삽입 할 수 있습니까?