在Typescript中var和let有什么区别?

时间:2016-02-23 08:53:47

标签: typescript

我提交了一个关于堆栈溢出的问题,询问如何阻止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);
}]

5 个答案:

答案 0 :(得分:49)

var声明是函数作用域,let声明是块作用域。

有关详细信息,请参阅https://basarat.gitbooks.io/typescript/content/docs/let.html

答案 1 :(得分:22)

示例:

SetEndOfFile

很容易知道

答案 2 :(得分:13)

JavaScript中的

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

答案 3 :(得分:3)

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

答案 4 :(得分:0)

一切都与可访问性有关。如果您使用 let,那么它只能在该范围内访问,而不能超出 functionifelse 范围。但是 var 我们可以在 forifelse 之外访问。

见下面的代码

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 objfor loop