3.typescript-定义变量
在JavaScript中使用var定义变量,但是在typescript中定义变量推荐使用let ,let声明的变量只在其所在的代码块内有效
1.要想正常使用let的前提:在.ts文件最上面添加(严格模式) "use strict";
![](https://images2017.cnblogs.com/blog/980779/201708/980779-20170810195618949-106258043.png)
2.let声明的变量只在其块级作用域内生效
![](https://images2017.cnblogs.com/blog/980779/201708/980779-20170810195630605-888150273.png)
会报以下错误 说找不到a这个变量
![](https://images2017.cnblogs.com/blog/980779/201708/980779-20170810195649324-1922073205.png)
3. for循环应用场景
var定义变量时,for循环在正常的情况下是可以正常输出的
![](https://images2017.cnblogs.com/blog/980779/201708/980779-20170810195659636-1873062856.png)
![](https://images2017.cnblogs.com/blog/980779/201708/980779-20170810195708214-1260727870.png)
但当for循环内出现闭包函数的时候就全部输出最后一个值(原理见 js->闭包循环问题)
![](https://images2017.cnblogs.com/blog/980779/201708/980779-20170810195716464-1605626968.png)
![](https://images2017.cnblogs.com/blog/980779/201708/980779-20170810195727230-620323924.png)
这个时候我们往往会利用立即执行函数来改变这种输出状态
![](https://images2017.cnblogs.com/blog/980779/201708/980779-20170810195735074-1754781980.png)
![](https://images2017.cnblogs.com/blog/980779/201708/980779-20170810195746324-1157619677.png)
但是使用let定义变量就可以直接解决这个问题
![](https://images2017.cnblogs.com/blog/980779/201708/980779-20170810195754152-81881639.png)
![](https://images2017.cnblogs.com/blog/980779/201708/980779-20170810195805027-1575466156.png)
注意:
- let定义的变量不会变量提升
- let不允许重复声明(即使上一次是使用var声明的)
- let不会泄露循环变量为全局变量
等等..
相关文档