JS | 动态生成函数 和 保存局部变量

动态生成函数 和 保存局部变量,适用于 闭包高阶函数,存在于异步编程事件处理回调函数以及函数式编程中。


动态生成函数:运行时创建函数。

  • 闭包:创建一个可以访问外部作用域变量的函数。

  • Function 构造函数:使用 new Function() 可以动态生成函数。

  • setTimeoutsetInterval:这些异步操作通常需要动态生成回调函数。

常见应用

  • 事件监听器:根据事件参数动态生成回调函数。

  • 异步任务:如定时器回调、网络请求的响应回调等。

  • 函数式编程:例如高阶函数(接受函数作为参数或返回函数),用于灵活的操作数据。

示例:这里的 makeAdder 动态生成了一个新的加法函数 add5,并且 add5 是基于外部参数 a 来生成的。

function makeAdder(a) {
  return function(b) {
    return a + b;
  }
}

let add5 = makeAdder(5);  // 动态生成一个函数
console.log(add5(10));     // 输出 15

保存局部变量(闭包):

一个函数能够“记住”并访问它创建时的作用域中的局部变量,即使这个函数在外部环境中被调用。通过闭包,可以访问函数外部的变量,从而保存局部变量的状态

常见应用

  • 封装数据:通过闭包,函数可以封装私有数据,防止外部直接访问。

  • 计数器:闭包常用来实现计数器,因为它可以保持状态。

  • 函数工厂:返回一个定制化的函数,使用外部参数。

示例:这里 counter 是一个闭包,它记住了 count 的值并且可以不断更新,尽管每次调用 counter() 都是在外部作用域中。

function makeCounter() {
  let count = 0;  // count 是一个局部变量
  return function() {
    count++;
    return count;  // 闭包保存了对 count 的引用
  }
}

let counter = makeCounter();
console.log(counter()); // 输出 1
console.log(counter()); // 输出 2

总结:动态生成函数与保存局部变量的常见应用

  1. 动态生成函数

    • 高阶函数:如 mapfilterreducesetTimeout 等。

    • 回调函数:在事件驱动编程中,动态生成回调函数处理不同的事件。

    • 构建定制化函数:根据传入参数生成具有特定行为的函数(如工厂函数)。

  2. 保存局部变量( 闭包 

    • 封装和私有数据:闭包可以帮助封装数据,避免外部直接访问或修改。

    • 保持状态:如计数器、状态管理器等场景。

    • 实现延迟计算:通过闭包延迟计算的结果,直到需要时再执行。

常见场景

  • 事件处理:在事件监听器中,闭包可以访问事件处理函数的局部变量。

  • 异步编程:如 setTimeoutfetch 等,在回调函数中使用闭包来保持状态或参数。

  • 函数式编程:高阶函数、函数组合等,通常会用到动态生成函数和闭包。

总结

  • 动态生成函数:在函数式编程中非常常见,可以灵活创建特定功能的函数,特别适用于回调、事件处理和定时器等场景。

  • 保存局部变量(闭包):闭包是 JavaScript 的一个强大特性,允许函数持久化局部变量的状态,常用于实现私有数据封装、计数器等功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值