我提交了一个有关堆栈溢出的问题,询问如何在先前版本已经执行的情况下阻止 putTestQuestionResponses() 函数执行。
答案是添加一个处理标志,该标志位于此代码的第 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);
}]
示例:
// 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
var
变量是函数作用域的。这与许多其他语言(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
function varTest() {
var x = 1;
if (true) {
var x = 2; // same variable!
console.log(x); // 2
}
console.log(x); // 2
}
function letTest() {
let x = 1;
if (true) {
let x = 2; // different variable
console.log(x); // 2
}
console.log(x); // 1
}
我在这里找到了这个
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let
一切都与可访问性有关。如果您使用
let
,则只能在该范围内访问它,而不能在 function
、if
、else
范围之外访问。但是var
我们可以在for
、if
、else
之外访问。
见下面代码
public selectedLocation(country)
{
if(instance==this.list[0])
{
var obj=this.productArray
}
for(let i = 0; i < this.obj.length; i++)
{
obj=this.productPending
}
}
上面的代码适用于
var obj
,但这不适用于 let obj
的 for loop
。