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
    

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

  • 相关阅读:
    php
    图片拖拽
    12.20
    正则详细讲解
    12.19
    正则
    闭包
    date类
    二分查找
    冒泡排序
  • 原文地址:https://www.cnblogs.com/winfred/p/6395699.html
Copyright © 2011-2022 走看看