一:setTimeout
setTimeout的例子,我们最后需要使用立即执行的函数表达式来获取每次for循环迭代里的状态。
实际上,我们做的是为获取到的变量创建了一个新的变量环境。 这样做挺痛苦的,但是幸运的是,
你不必在TypeScript里这样做了。当let声明出现在循环体里时拥有完全不同的行为。 不仅是在
循环里引入了一个新的变量环境,而是针对每次迭代都会创建这样一个新作用域。 这就是我们在
使用立即执行的函数表达式时做的事,所以在setTimeout例子里我们仅使用let声明就可以了。
for (let i = 0; i < 10 ; i++) {
setTimeout(function() {console.log(i); }, 100 * i);
}
二:let vs. const
现在我们有两种作用域相似的声明方式,我们自然会问到底应该使用哪个。 与大多数泛泛的问题一样,
答案是:依情况而定。
使用最小特权原则,所有变量除了你计划去修改的都应该使用const。 基本原则就是如果一个变量不
需要对它写入,那么其它使用这些代码的人也不能够写入它们,并且要思考为什么会需要对这些变量
重新赋值。 使用const也可以让我们更容易的推测数据的流动。
另一方面,用户很喜欢let的简洁性。 这个手册大部分地方都使用了let。
跟据你的自己判断,如果合适的话,与团队成员商议一下。 Fortunately, TypeScript allows
you to specify that members of an object are readonly. The chapter on Interfaces
has the details.