JavaScript使用生成器优雅实现计数器

作者 : 开心源码 本文共835个字,预计阅读时间需要3分钟 发布时间: 2022-05-13 共203人阅读

JavaScript没有局部作用域的概念, 所以一个简单的计数器, 都需要写一个嵌套函数(外层函数负责存储变量, 内层函数负责计数逻辑)

  • 实现代码:
function addNum(){    let result = 0;    return function(num){        result = result+num;        return result    }}function main(){    let an = addNum();    console.log('第一次调用', an(10));    console.log('第二次调用', an(2000));}main()
  • 当然假如用迭代器和生成器也能实现, 而且看起来更优雅少量

'use strict';// 生成器函数function *addNum() {    let result = 0;    while(true){        // 第一步: 可以在yiled处获取10,         // 第二步: 运算result+10, 运算结果10, 被赋值给result        // 第三步: 通过语法`(yield result)`将10传递回迭代器        result = result + (yield result);    }}function main() {    // 创立迭代器an    const an = addNum();    // 第一次调用next,可以让生成器函数运行到第一个yield的位置, 但不需要传参数(传了也没用)    console.log('第一次调用迭代器(不传参数)返回的结果:', an.next().value);    // 第二次调用next, 传入参数10, 通过`.value语法获取生成器返回的值`    console.log('第二次调用迭代器(传入参数10)返回的结果:', an.next(10).value);    // 第三次调用与第二次调用相似, 传入参数2000, 获取的生成器的返回值应为2010;(2010为第二次传入的10, 与第三次传入的2000,相加取得的结果)    console.log('第三次调用迭代器(传入参数2000)返回的结果:',an.next(2000).value);}main()
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » JavaScript使用生成器优雅实现计数器

发表回复