2016-02-23 15 views
9

私はputTestQuestionResponses()関数が以前のバージョンがすでに実行されていたIFを実行するのを止める方法を尋ねて、スタックオーバーフローに関する質問を提出しました。Typescriptのvarとletの違いは何ですか?

返信は、このコードの2行目の処理フラグに追加することでした。

「var」の代わりに「let」を使用する理由を教えてください。

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 

JavaScriptで

6

var変数を知ることは容易である関数がスコープされています。これは、変数がブロックスコープである他の多くの言語(C#、Javaなど)とは異なります。 {は、新しい変数のスコープを作成しないためです

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

console.log(foo); // 456 

:あなたはJavaScriptに考え方をスコープブロックを持っている場合は、代わりに、それは456を印刷し、123を印刷するには、次の期待します。変数fooはifブロックの内側で同じで、ifブロックの外側にあります。これは、JavaScriptプログラミングの一般的なエラーの原因です。このため、TypeScript(およびES6)にletキーワードが導入され、真のブロックスコープで変数を定義できるようになりました。つまり、varの代わりにletを使用すると、スコープ外で定義した可能性のある本当のユニークな要素が切り離されます。同じ例がletで実証されています

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

} 

console.log(foo); // 123 
関連する問題