用官方的话来说:闭包是由函数及声明该函数的环境组合而成的。该环境包含了这个闭包创建时作用域内的任何局部变量。 

说的明白一点:闭包环境的生成逻辑大概如下,在声明一个函数之后,在其内部再声明一个函数,内层函数调用外层的局部变量进行处理,并且返回这个变量,外层函数再把内层函数整体的函数体返回到外层函数体外,从而让全局中可以调用到外层函数体内的局部变量,从而避免了全局变量带来的一些弊端,起到缓存数据的作用

以下是一个简单的示例:

function f():() => number {
  let count = 0;
  let g = ():number => { count++;return count }
  return g
}
let z = f()
// 每次调用z()都会保留count的值
console.log(`${z()}`) //1
console.log(`${z()}`) //2
console.log(`${z()}`) //3
//实现一个简单的累加计算器
function a():Function{
  let count = 0
  let g = (x:number,y:number = 0):number => {
    count = count + x + y
    return count
  }
  return g
}
let z = a()
console.log(z(1,5)) //6
console.log(z(8))   //14

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐