我提交了一个关于堆栈溢出的问题,询问如何阻止putTestQuestionResponses()函数执行IF以前的版本已经执行.
回复是添加一个处理标志,该标志位于此代码的第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);
}]
Run Code Online (Sandbox Code Playgroud)
Mar*_*cka 57
var声明是函数作用域,let声明是块作用域.
有关详细信息,请参阅https://basarat.gitbooks.io/typescript/content/docs/let.html.
小智 27
例:
// 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
Run Code Online (Sandbox Code Playgroud)
很容易知道
小智 18
varJavaScript中的变量是函数作用域.这与变量是块作用域的许多其他语言(C#,Java等)不同.如果你将一个块范围的思维模式带到JavaScript,你可能希望以下内容打印123,而不是它将打印456:
var foo = 123;
if (true) {
var foo = 456;
}
console.log(foo); // 456
Run Code Online (Sandbox Code Playgroud)
这是因为{不创建新的变量范围.fooif块内的变量与if块之外的变量相同.这是JavaScript编程中常见的错误来源.这就是TypeScript(和ES6)引入let关键字以允许您使用true块范围定义变量的原因.也就是说,如果您使用let而不是var,则会获得与您在范围外定义的内容断开的真正唯一元素.以下示例演示了相同的示例let:
let foo = 123;
if (true) {
let foo = 456;
}
console.log(foo); // 123
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28319 次 |
| 最近记录: |