ArkTs中的闭包

254 阅读1分钟
  • 官方解释     闭包是由函数及声明该函数的环境组合而成。

    通俗的讲就是,我们声明一个函数时候,除了函数本身,可能还会存在一些函数所使用的外部变量或方法等环境。 将这个函数以及设计到的所有外部变量,方法等一些封装为一个函数提供给外部使用,称这个为闭包。

比如我存在一个函数:

    let count = 0;
    let label = ""

    let g = (): string => {
      count++;
      label += count
      return label;
    }

该函数主要对一个全局变量count做加1运算,且将每次运算结果相连接返回结果。

如果我们调用多次函数g(),那么前后两次返回的值不同。

g() // 1
g() // 12
g() // 123

如果我们存在两个场景,分别想要统计各个场景调用函数g的次数,我们可能常规的处理方法是将上述代码逻辑封装到一个类中,然后分别为这两个场景各定义一个对象,通过分别统计这两个对象中的count值来统计调用次数。

对于闭包,我们可以将上述这些代码逻辑封装为一个新函数,如下:

function f(): () => string {
    let count = 0;
    let label = ""

    let g = (): string => {
      count++;
      label += count
      return label;
    }

    return g;
  }

然后分别在两个场景中各声明一个对函数的引用,接着调用函数,也可以实现该功能。对于这个方法f(),称之为闭包。里边包含了一个函数,以及该函数涉及到的环境。

    let f1 = f();
    f1() // 输出:1
    f1() // 输出:12

    let f2 = f();
    f2()  // 输出:1