2016-02-23 15 views
9

Ho inviato una domanda sull'overflow dello stack chiedendo come avrei potuto interrompere la funzione putTestQuestionResponses() dall'esecuzione di IF che una versione precedente stava già eseguendo.Qual è la differenza tra var e let in Typescript?

La risposta era di aggiungere un flag di elaborazione che è qui sulla riga 2 di questo codice.

Puoi dirmi perché usare un "let" invece di "var" qui?

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

vi consiglio di leggere https://basarat.gitbooks.io/typescript/content/docs/let.html –

+0

questo sembra anche essere duplicato di http: // StackOverflow .com/questions/32051173/var-and-let-in-typescipt-1-5 – ciekawy

+0

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

risposta

7

esempio:

// 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 

è facile sapere

6

var variabili in JavaScript sono funzione di ambito. Questo è diverso da molti altri linguaggi (C#, Java, ecc.) In cui le variabili sono a blocchi. Se si mettono un blocco ambito mentalità di JavaScript, che ci si aspetta quanto segue per stampare 123, invece stamperà 456:

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

console.log(foo); // 456 

Questo perché { non crea un nuovo ambito variabile. La variabile foo è la stessa all'interno del blocco if in quanto è al di fuori del blocco if. Questa è una fonte comune di errori nella programmazione JavaScript. Questo è il motivo per cui TypeScript (ed ES6) introduce la parola chiave let per consentire di definire variabili con ambito di blocco reale. Cioè, se usi let invece di var, ottieni un vero elemento univoco disconnesso da ciò che potresti aver definito al di fuori dell'ambito. Lo stesso esempio è dimostrato con let:

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

} 

console.log(foo); // 123 
Problemi correlati