• TS学习之变量声明


    1.Var 声明变量

    a)存在变量提升

    (function(){
      var a = "1";
      var f = function(){};
      var b = "2";
      var c = "3";
    })();

    相当于:

    (function(){
      var a,f,b,c;
      a = "1";
      f = function(){};
      b = "2";
      c = "3";
    })();

    b)声明多个重复变量,后者覆盖前者

    var a = 10;
    var a = 20;
    var a = 30;
    console.log(a)  //30

    c)var声明可以在包含它的函数,模块,命名空间或全局作用域内部任何位置被访问

    function f(shouldInitialize) {
        if (shouldInitialize) {
            var x = 10;
        }
    
        return x;
    }
    
    f(true);  // 10
    f(false); // undefined

    d)作用域问题

    function sumMatrix(matrix: number[][]) {
        var sum = 0;
        for (var i = 0; i < matrix.length; i++) {
            var currentRow = matrix[i];
            for (var i = 0; i < currentRow.length; i++) {
                sum += currentRow[i];
            }
        }
    
        return sum;
    }
    
    console.log(sumMatrix([[1,2,3],[10,2,3]]))   //无论第二个数组怎么改变,结果始终为6

     e)怪异的变量获取

    for (var i = 0; i < 10; i++) {
        setTimeout(function() { console.log(i); }, 100 * i);
    }
    //期望输出结果:0-9
    //实际输出结果:10个10

    解决方式:

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

    2.let变量声明

    a)当用let声明一个变量,它使用的是词法作用域块作用域,在包含它们的块或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;
    }

    b)不能在 let语句之前访问它们

    a++; // illegal to use 'a' before it's declared;
    let a;

    c)同时多次声明同一个变量报错

    let x = 10;
    let x = 20; // 错误,不能在1个作用域里多次声明`x`

    3.const变量声明

    与 let相同的作用域规则,但是不能对它们重新赋值。

  • 相关阅读:
    redis
    基础加强(@注解)
    过滤器Filter
    监听器
    ajax
    Java 常用类Math、System、时间相关Calender和Date
    Java Object、Scanner、String 、生成jar包
    Java 内部类、eclipse、包
    Java 面向对象之抽象
    Java 面向对象三大特征之多态
  • 原文地址:https://www.cnblogs.com/sghy/p/7724175.html
Copyright © 2020-2023  润新知