const 是对 let 的一个增强,它能阻值对一个变量再次赋值。
在 typeScript 中同样存在 var const let 而且对于他们的作用域,像函数作用域、块级作用域同样也是一样的
重定义以及屏蔽
类似于下面的情况:
function fn(x) { var x = 1 // let x = 1 console.log(x) } fn(0)
在运行函数 fn() 的时候,定义 var x = 1; 是可以有打印的,如果是 用 let x = 1; 这样就会报错,因为 let 的语法,要求在同一个块级作用域内不能用重复的变量,虽然 x 是一个形参,这也是不可以的;
想要进行声明的话,我们可以采用 “屏蔽” 的方式就行处理,所谓的屏蔽就是:在一个嵌套作用域里引入一个新名字的行为; 利用屏蔽可以解决一些问题,但是一不小心也会引入新问题;例如:
function fn(isTrue, x) { if (isTrue) { let x = 1 return x } return x } console.log(fn(true, 0)) // 1 console.log(fn(false, 0)) // 0
利用 if 条件的 { } 形成一个新的块级作用域,这样就可以让 let 定义的变量名可以和形参一样了,这样的行为就是 “屏蔽”
数组的结构
let [a,b, ...c] = [1,2,3,4,5,6] console.log(a) // 1 console.log(b) // 2 console.log(c) // [3,4,5,6] let [,d,e] = [1,2,3,4,5] console.log(d) // 2 console.log(e) // 3
对象的结构
let {a, b, c} = {a: 1, b: 2} console.log(a) // 1 console.log(b) // 2 console.log(c) // undefined
如果不用 let、const、var 的话,可以直接 ({a, b} = { a:1, b: 2})来进行对象的结构赋值;
此外也可以在结构赋值的时候利用 ... 语法,例如: ({a, b, ...c} = {a: 1, b: 2}),这样就定义了一个新的对象 c = { }