2017-12-28 5 views
0

'let hours'변수를 클래스와 비교해야합니다. 비교 작업은 'utcChange'(버튼을 클릭 한 후)이라는 별도의 기능으로 수행해야합니다. 나는 이것이 처음부터이 변수를 선언한다면 어디서나 액세스 할 수 있다고 생각했다. 이유문 내부에 가있는 경우 utcChange 기능이 작동하지 않습니까?전역 변수가 허용 되더라도 클래스 내부에있는 변수의 값을 비교할 수 없습니다.

let hours; 

class Clock { 
    el: Element; 
    constructor(element) { 
    this.el = element; 
    setInterval(() => this.run(), 1000) 
    } 

    run() { 
    var time = new Date(); 
    let hours = time.getHours()+utcValue; 
    var hoursChanged = hours.toString(); 
    var minutes = time.getMinutes().toString(); 
    var seconds = time.getSeconds().toString(); 

    if (hoursChanged.length < 2) { 
     hoursChanged = '0' + hoursChanged; 
    } 

    if (minutes.length < 2) { 
     minutes = '0' + minutes; 
    } 

    if (seconds.length < 2) { 
     seconds = '0' + seconds; 
    } 

    var clockStr = hours + ' : ' + minutes + ' : ' + seconds; 

    this.el.textContent = clockStr; 
    } 
} 

var clock = new Clock(document.getElementById('tsClock')); 
var utcButton = document.getElementById('button'); 
utcButton.addEventListener("click", utcChange); 
var utcValue = 0 

function utcChange(){ 

    if (hours < 23) { 
     utcValue += 1 
    } 
} 
+0

난 당신이 전역 변수를 초기화하는 것을 볼니까. 또한 오류가 발생하면 붙여 넣을 수 있습니까? –

답변

1

let hours는 변수가에 정의되어 함수 내에서만 액세스 할 수 있음을 의미합니다.

는 다른 함수에서 사용이 필드하려면.

예 :

class Clock { 
    hours: number; 
    run() { 
     this.hours = ...; 
    } 
} 

function utcChange() { 
    if (clock.hours < 23) 
     // ... 
} 
3

클래스의 run 함수의 로컬 변수는 외부 변수를 음영합니다. 선언에서 let 부분을 제거하십시오.

run() { 
    var time = new Date(); 
    hours = time.getHours()+utcValue; 
    var hoursChanged = hours.toString(); // Use without `let` 
    var minutes = time.getMinutes().toString(); 
    var seconds = time.getSeconds().toString() 
    ... 
} 

glboal 변수를 사용하지 않는 것이 더 좋을 것이다. 변수를 필드로 만들고 객체 필드를 사용하여 hours에 액세스합니다.

관련 문제