【TS笔记】变量声明

// 变量声明

// 三种方式: var Let const

// 1.var声明

  var a = 10;
  function fn(){
    var message = 'Hello,world!';
    return message
  }

  function fn2(){
    var a = 10;
    return function fn3(){
      var b = a + 1;
      return b;
    }
  }

  var g = fn2();
  g()

  // console.log(g()); // return 11

// 上面的例子里,g可以获取到f函数里定义的a变量。 每当 g被调用时,它都可以访问到f里的a变量。 即使当 g在f已经执行完后才被调用,它仍然可以访问及修改a。

    function f() {
      var a = 1;
  
      a = 2;
      var b = g();
      a = 3;
  
      return b;
  
      function g() {
          return a;
      }
  }
  
  f(); // returns 2

// a.作用域规则
      function fun(shouldInitialize: boolean) {
        if (shouldInitialize) {
            var x = 10;
        }

        return x;  // TypeScript报错:在赋值前使用了变量“x”
      }
      // console.log(fun(true)) // 10
      // console.log(fun(false)) // undefined

    // 变量x的定义在if判断语句中,但我们在外面能够访问到x。这是因为var声明可以在包含它的函数,模块,命名空间或全局作用域内部任何位置被访问,包含它的代码块对此没有什么影响。 有些人称此为var作用域或函数作用域。 函数参数也使用函数作用域。

    // 使用var作用域可能导致的错误:
      // 多次声明一个变量不会报错
    function sum(arr: number[][]){
      var num = 0;
      for(var i = 0; i < arr.length; i++){
          var num2 = arr[i];
          for(var i = 0; i < num2.length; i++){
            num += num2[i]
          }
      }
      return num
    }
    // console.log(sum([[1,2,3,4,5,6,7,8,9,10]])) // 55


// b.捕获变量怪异之处
      for (var i = 0; i < 10; i++){
        // setTimeout(function(){console.log(i), 100});  //[10,10,...,10];  
      }
      // 因为for循环每次执行的都是相同作用域同一个变量i 所以每次都是在循环完成后打印10
      // 解决方法就是利用立即执行函数

      for(var i = 0; i < 10; i++){
        (function(i) {
          // setTimeout(function() { console.log(i); }, 100 * i); //[0,1,2,...,9]
        })(i);
      }

// 2.Let声明 (写法与var一致,主要在于语义上的区别)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值