2024大二上js高级+ES6学习9.26(闭包,递归函数)

9.26.2024

1.闭包

什么是闭包:

闭包的作用:

Return 的函数作为fn的子函数,可以使用fn的局部变量num,局部变量num要等所有使用它的函数调用完毕后才销毁

2.闭包的案例

点击li会发现输出4

在 JavaScript 中,事件处理器(如 onclick)是异步的,这意味着它们不会立即执行,而是在特定的事件发生时(在这个例子中,是用户点击元素时)才会被调用。因此,尽管你在循环中为每个元素的 onclick 属性分配了函数,但这些函数并不会在循环结束之前执行。它们只是被设置为在将来某个时刻(用户点击元素时)可能被调用的函数。

以下是为什么这些函数是在循环结束后才调用的详细解释:

  1. 事件监听器的异步性质
    • onclick 属性设置的函数是一个事件监听器。它告诉浏览器在用户点击元素时执行特定的函数。这个函数的调用是异步的,因为它依赖于用户的行为。
  2. 事件循环
    • JavaScript 运行在单线程环境中,使用事件循环来处理异步操作。当循环中的函数设置完毕后,JavaScript 引擎会继续执行其他任务。只有当相应的事件(如点击)发生时,事件循环才会从消息队列中取出事件监听器函数并执行。
  3. 非阻塞行为
    • JavaScript 设计为非阻塞语言,这意味着它允许页面在执行长时间运行的脚本时仍然响应用户操作。设置事件监听器(如 onclick)不会阻塞代码的执行,因此循环可以快速完成,而事件监听器函数则在事件发生时被调用。
  4. 用户交互触发
    • onclick 函数只有在用户实际点击元素时才会执行。这是用户交互的一部分,而不是代码执行的一部分。
  5. 闭包和变量引用
    • 在循环中,每个 onclick 函数捕获了循环变量 i 的当前引用。由于这些函数是闭包,它们引用的是循环变量 i 而不是它的值的副本。因此,当这些函数最终被调用时(用户点击),它们引用的 i 变量的值是循环结束时的值。
  6. 循环结束
    • 循环结束意味着所有的 onclick 函数已经被设置好,但是还没有被调用。它们只是在等待用户的点击事件。

这就是为什么在循环中设置的 onclick 函数会在循环结束后才被调用的原因。这种行为是 JavaScript 事件驱动和异步执行模型的一部分。

闭包不一定是好的:会占用内存

案例实现原理:应用立即执行函数的立即响应包

案例一:

案例二:

案例三:出租车计费器

思考题:

3、递归函数

案例:

4.递归遍历数据:

升级:使用变量obj来接受返回的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值