2016-02-23 2 views
9

Я отправил вопрос о переполнении стека, спрашивая, как я могу остановить функцию putTestQuestionResponses() от выполнения IF, если предыдущая версия уже выполнялась.В чем разница между var и let в TypScript?

Ответ должен был добавить флаг обработки, который находится здесь в строке 2 этого кода.

Можете ли вы сказать мне, зачем использовать «let» вместо «var» здесь?

var promisePutTestQuestion; 
let processing = false; 

onEnter: ['$interval', 'questionService', 
     ($interval, qus: IQuestionService) => { 
    promisePutTestQuestion = $interval(() => { 
    if (processing) 
     return; 
    processing = true; 
    qus.putTestQuestionResponses() 
    .then(() => processing = false) 
    }, 5 * 1000); 
}], 
onExit: ['$interval', ($interval) => { 
     $interval.cancel(promisePutTestQuestion); 
}] 
+1

Я рекомендую прочитать https://basarat.gitbooks.io/typescript/content/docs/let.html –

+0

это, кажется, также быть дубликатом HTTP: // StackOverflow .com/questions/32051173/var-and-let-in-typescipt-1-5 – ciekawy

+0

http://stackoverflow.com/questions/762011/let-keyword-vs-var-keyword –

ответ

7

пример:

// demo: var 
for(var i =0 ; i<5 ; i++){ 
    console.log(i) 
}//finally i =5 
console.log(i) // i=5 

// demo: let 
for(let i = 0; i<5;i++){ 
    console.log(i) 
} 
console.log(i)// i is undefined 

легко знать

6

var переменные в JavaScript являются функцией области видимости. Это отличается от многих других языков (C#, Java и т. Д.), Где переменные блокируются. Если вы приносите блок контекстного настрой на JavaScript, можно было бы ожидать следующее для печати 123, вместо этого он будет печатать 456:

var foo = 123; 
if (true) { 
    var foo = 456; 
} 

console.log(foo); // 456 

Это потому, что { не создает новые переменные сферы. Переменная foo такая же внутри блока if, поскольку она находится вне блока if. Это общий источник ошибок в программировании JavaScript. Вот почему TypeScript (и ES6) вводит ключевое слово let, чтобы вы могли определять переменные с истинным масштабом блока. То есть, если вы используете let вместо var, вы получите истинный уникальный элемент, отключенный от того, что вы могли бы определить вне области видимости. Тот же пример демонстрирует с let:

let foo = 123; 
if (true) { 
    let foo = 456; 

} 

console.log(foo); // 123 
Смежные вопросы