美文网首页我爱编程
TypeScript 学习笔记 之 变量声明

TypeScript 学习笔记 之 变量声明

作者: 一半晴天 | 来源:发表于2018-03-01 21:43 被阅读20次

TS 跟最新的 JS 标准一样支持三种变量声明类型:var,let,const
其中 let 是为了取代 var 的。所以我们在 TS 一般情况只使用 letconst
let 声明变量,const 声明常量

为什么不建议使用 var

  1. 首先是 var 变量的作用域是反人类的。比如如下代码:
function f(init:boolean){
  if(init){
    var x = 10;
  }
 return x;
}

按我们的编程经验,变量 x 应该是被限定在 if 这一代码块中。但是 x 变量的作用域却是整个函数的。所以容易导致错误。

  1. 其次 var 变量的捕获规则也是反人类的。
    例如如下代码:
for(var i = 0; i< 10; i++){
  setTimeout(function(){console.log(i);},100*i);
}

上面的代码将输出 10 个10, 而不是直觉上的 0到9这10个数。
核心问题还是在于var 声明的变量是整个函数作用域的,所以10次输出输出的其实都是同一个变量。所以输出的是此变量的最终值。另外也说明在 JS 中 var 变量是可以重复声明的。
在之前的 JS 标准中为了解决上面的问题,一般是通过添加一层函数调用的方式来解决,代码如下:

for (var i = 0; i < 10; i++) {
    (function(i) {
        setTimeout(function() { console.log(i); }, 100 * i);
    })(i);
}

而使用 let 声明变量则没有上面的问题。

  1. let 变量的作用域,符合一般的逻辑,是基于代码块的。
  2. let 对于循环来说,let 为基于每一次循环创建新的作用域。也就避免了上面 var 循环中的问题。

const 继承了 let 声明的优点。但是是常用声明常量的。也很好理解。

参考 Variable Declarations

相关文章

网友评论

    本文标题:TypeScript 学习笔记 之 变量声明

    本文链接:https://www.haomeiwen.com/subject/ibinxftx.html