typeScrip(二)变量声明、解构

  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 = { }

posted @ 2019-07-19 15:43  mumengchun  阅读(218)  评论(0编辑  收藏  举报