TypeScript的变量声明
let
和const
是JavaScript里相对较新的变量声明方式 。 像我们之前提到过的, let
在很多方面与var
是相似的,但是可以帮助大家避免在JavaScript里常见一些问题。 const
是对let
的一个增强,它能阻止对一个变量再次赋值。
因为TypeScript是JavaScript的超集,所以它本身就支持let
和const
。 后面我们会详细说明这些新的声明方式以及为什么推荐使用它们来代替 var
。
var 声明
我们可以定义一个名为a
值为25
的变量;
var a = 25;
也可以在函数内部定义变量:
function f() {
var message = "Hello, world!";
return message;
}
我们也可以在其它函数内部访问相同的变量
function f() {
var a = 25;
return function g() {
var b = a + 30;
return b;
}
}
var g = f();
g(); // returns 55;
let
声明
现在你已经知道了var
存在一些问题,这恰好说明了为什么用let
语句来声明变量。 除了名字不同外, let
与var
的写法一致。**
let name = "liming";
当用
let
声明一个变量,它使用的是词法作用域或块作用域。 不同于使用var
声明的变量那样可以在包含它们的函数外访问,块作用域变量在包含它们的块或for
循环之外是不能访问的
function f(input: boolean) {
let a = 100;
if (input) {
// Still okay to reference 'a'
let b = a + 1;
return b;
}
// Error: 'b' doesn't exist here
return b;
}
const声明
const
声明是声明变量的另一种方式,它与let
声明相似,但是就像它的名字所表达的,它们被赋值后不能再改变。 换句话说,它们拥有与 let
相同的作用域规则,但是不能对它们重新赋值。即他是个固定值
const a = 9;
const b = {
name: "Lisa",
numLives: a,
}
// Error
b = {
name: "Roman",
numLives: a
};
// all "okay"
b.name = "Robin";
b.name = "Danny";
b.name = "Dog";
b.numLives--;
结语
** let
vs. const
**
现在我们有两种作用域相似的声明方式,我们自然会问到底应该使用哪个。 与大多数泛泛的问题一样,答案是:依情况而定。
使用最小特权原则,所有变量除了你计划去修改的都应该使用const
。 基本原则就是如果一个变量不需要对它写入,那么其它使用这些代码的人也不能够写入它们,并且要思考为什么会需要对这些变量重新赋值。 使用 const
也可以让我们更容易的推测数据的流动。
转载自:https://juejin.cn/post/7125609677689192461