zoukankan      html  css  js  c++  java
  • TypeScript笔记 4--变量声明

    上一篇:基础变量中我们在声明变量时使用了关键字let,这和JS中的var有点类似。

    语法

    基本语法:let 变量名:类型。当然类型不是必须的。

    let x:number;
    let y:string = 'xx';
    let z;
    z = 'xxx';
    

    var

    var和let最大区别就是作用域不同,let有严格的块作用域。

    • 1 我们都知道,js中的作用域不是很严格。比如下面代码:
    flag = true;
    if (flag) {
        var msg = 'I am OK';
    }
    
    console.log(msg); // I am OK
    

    在js中变量msg仍然可以输出I am OK,甚至变量flag不适用关键字也可声明。

    • 再举一个关于闭包的例子,如下:
    for (var i = 0; i < 10; i++) {
        setTimeout(function() { console.log(i); }, 100 * i);
    }
    

    输出结果则是:10个10。

    • 3 重复定义和变量提升
    var x = 10;
    var x = 20;
    

    在js中连续声明同一个变量是不会报错的,我们只会得到最后声明的。

    • 4 变量提升
    a++;
    var a';
    

    变量提升在js中也很常见,解释器解析时会先遍历变量声明,然后将其提升到函数最上面,所以上面的写法完全没有问题

    以上这些问题经常在review时漏洞,引发无穷的麻烦。很多团队中也禁止出现这种代码,就是防止潜在的风险。现在有了let我们再也不用担心这方面的问题了。

    let

    var相比,let是块作用域。 块作用域变量在包含它们的块或for循环之外是不能访问的。

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

    输出结果:从0到9

    flag = true;
    if (flag) {
        let msg = 'I am OK';
    }
    
    console.log(msg); // 编译报错
    
    var x = 10;
    var x = 20; // 编译报错
    
    
    a++;
    var a'; // 编译报错
    
    

    varlet区别

    • 作用不同,let是有严格的块作用域
    • 在块中,不能重复声明,要先声明后使用,这和java这种强类型语言一样

    const声明

    const是对let的一个增强,它能阻止对一个变量再次赋值。类似java中的final.

    const msg = "This is a message";
    msg = "xx" // 编译报错
    
    const person = {
        name: "Aurora",
        age: 20
    }
    
    person = {}; // 编译报错
    
    person.name = "tom" // OK
    person.age = 10 // OK
    

    对于对象,我们可以改变对象内部属性的值,但是不能改变对象引用(不确切地说是对象地址)

  • 相关阅读:
    poj 2584 T-Shirt Gumbo (二分匹配)
    hdu 1757 A Simple Math Problem (乘法矩阵)
    矩阵之矩阵乘法(转载)
    poj 2239 Selecting Courses (二分匹配)
    hdu 3661 Assignments (贪心)
    hdu 1348 Wall (凸包)
    poj 2060 Taxi Cab Scheme (二分匹配)
    hdu 2202 最大三角形 (凸包)
    hdu 1577 WisKey的眼神 (数学几何)
    poj 1719 Shooting Contest (二分匹配)
  • 原文地址:https://www.cnblogs.com/winfred/p/6395699.html
Copyright © 2011-2022 走看看