好家伙,

 

当我们对一个方法进行两次调用,我们希望第一次执行A分支,第二次执行B分支,该怎么做?

这意味着在连续的两次调用中,方法的执行逻辑会交替执行不同的分支。

方法一:公共变量

let flag = 1;

function myMethod() {
if (flag === 1) {
// 执行A分支的逻辑
console.log("执行A分支");
flag = 2;
} else if (flag === 2) {
// 执行B分支的逻辑
console.log("执行B分支");
flag = 1;
}
} // 第一次调用
myMethod(); // 输出:执行A分支 // 第二次调用
myMethod(); // 输出:执行B分支

 

 

  • 优点:

    • 简单直接,能直接想到
  • 缺点:
    • 全局变量容易被污染
    • 不利于模块化和封装,容易造成代码耦合度高,难以维护和扩展。

 

方法二:闭包

function createMethodCaller() {
let flag = 1; return function() {
if (flag === 1) {
// 执行A分支的逻辑
console.log("执行A分支");
flag = 2;
} else if (flag === 2) {
// 执行B分支的逻辑
console.log("执行B分支");
flag = 1;
}
};
} const myMethod = createMethodCaller(); // 第一次调用
myMethod(); // 输出:执行A分支 // 第二次调用
myMethod(); // 输出:执行B分支
  • 优点:
    • 使用闭包可以隐藏变量,避免全局变量污染。
    • 可以模拟私有变量,提高代码的封装性和安全性。
  • 缺点:
    • 闭包会增加内存消耗,可能导致内存泄漏问题。
    • 对闭包的理解和使用需要一定的经验,容易出现作用域和内存管理的问题。

 

 

方法三:类

class MethodCaller {
constructor() {
this.callCount = 0;
} callMethod() {
if (this.callCount === 0) {
// 执行A分支的逻辑
console.log("执行A分支");
this.callCount++;
} else {
// 执行B分支的逻辑
console.log("执行B分支");
this.callCount = 0;
}
}
} const myMethodCaller = new MethodCaller(); // 第一次调用
myMethodCaller.callMethod(); // 输出:执行A分支 // 第二次调用
myMethodCaller.callMethod(); // 输出:执行B分支

 

 

  • 优点:

    • 类提供了面向对象的编程方式,有利于封装数据和行为,提高代码的可维护性和可读性。
    • 可以通过类的实例化来管理对象状态,更好地组织和管理代码。
  • 缺点:
    • 不容易想到,并且引入类会增加代码的复杂度,不适用于简单的逻辑处理

 

JS笔记:方法两次调用,执行不同分支(公共变量,闭包,类三种方法实现)的更多相关文章

  1. JS变量和变量交换的三种方法

    一.what 变量就是用来存储数据的容器 二.how 通过var 关键字定义一个变量 var n1; //定义变量 变量的赋值:通过赋值运算符“=” 给变量赋值. var n2=123; //定义变量 ...

  2. [CentOS] 环境变量设置的三种方法

    在CentOS系统中添加环境变量的方法有几种,推荐第三种方法.这里以添加 TexLive 2017 的环境变量为例进行说明. 1. 修改  ~/.bash_profile  文档,在文末添加以下代码: ...

  3. mysql 变量赋值的三种方法

    mysql中变量不用事前申明,在用的时候直接用“@变量名”使用就可以了.第一种用法:set @num=1; 或set @num:=1; //这里要使用变量来保存数据,直接使用@num变量第二种用法:s ...

  4. Python类三种方法,函数传参,类与实例变量(一)

    1 Python的函数传递: 首先所有的变量都可以理解为内存中一个对象的'引用' a = 1 def func(a): a = 2 func(a) print(a) # 1 a = 1 def fun ...

  5. Linux下环境变量设置的三种方法

    如想将一个路径加入到$PATH中,可以像下面这样做: 1.控制台中设置,不赞成这种方式,因为他只对当前的shell 起作用,换一个shell设置就无效了:$PATH="$PATH" ...

  6. go语言中获取变量类型的三种方法

    package main import ( "fmt" "reflect" ) func main() { var num float64 = 3.14 // ...

  7. python 多线程编程之threading模块(Thread类)创建线程的三种方法

    摘录 python核心编程 上节介绍的thread模块,是不支持守护线程的.当主线程退出的时候,所有的子线程都将终止,不管他们是否仍在工作. 本节开始,我们开始介绍python的另外多线程模块thre ...

  8. 【Cocos2d-x游戏开发】解决Cocos2d-x中文乱码的三种方法

    众所周知,Cocos2d-x是一款不错的开源引擎,但是在Cocos2d-x中直接使用中文是无法正确显示的.比如下面的情况: 解决这个问题常用的有三种方法:1.通过转换为UTF-8编码来显示.2.使用i ...

  9. 【转载】取得系统中网卡MAC地址的三种方法

    From:http://blog.csdn.net/zhangting1987/article/details/2732135 网卡地址这个概念有点混淆不清.因为实际上有两个地址,mac地址和物理地址 ...

  10. linux 环境变量PATH路径的三种方法

    转:http://www.jb51.net/LINUXjishu/150167.html 总结:修改1.#PATH=$PATH:/etc/apache/bin  或者#vi /etc/profile ...

随机推荐

  1. Sysbench简单测试数据库性能

    摘要 先进行了一个PG数据库的测试. Mysql数据库的测试稍后跟上. 紧接着上一篇的安装, 部分文件可能需要特定路径才可以. sysbench 测试的说明 一个参数 这里稍微说一下参数的问题 sys ...

  2. 华为云DTSE携手“灵康宜”构造一站式智慧健康检测云平台

    本文分享自华为云社区<华为云DTSE携手"灵康宜"构造一站式智慧健康检测云平台>,作者: HuaweiCloudDeveloper. 打破传统健康监测方式桎梏--非接触 ...

  3. 【解决了一个小问题】terraform创建service后,如何获取VIP的值?

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 创建一个pod后,再为这个pod创建一个对应的servic ...

  4. # 重要-即时通讯IM开源项目OpenIM关于版本管理及v2.3.0发布计划

    越来越多的客户把OpenIM用到了生产环境,由于新特性持续迭代和bug修复,会涉及到后续的升级方案,为了让大家后续从容应对,本文重点总结OpenIM对未来版本管理的思路和方案.同时,官网对于文档进行了 ...

  5. SqlSugar更新数据

    1.根据实体对象更新 所谓按实体对象更新就是:db.Updateable(参数对象) 有参数的重载 db.Updateable(实体或者集合).ExecuteCommand() //右标题1 下面的所 ...

  6. 1.14 手工插入ShellCode反弹

    PE格式是 Windows下最常用的可执行文件格式,理解PE文件格式不仅可以了解操作系统的加载流程,还可以更好的理解操作系统对进程和内存相关的管理知识,而有些技术必须建立在了解PE文件格式的基础上,如 ...

  7. Pdfium.Net.Free 一个免费的Pdfium的 .net包装器--添加文本

    项目地址: Pdfium.Net:https://github.com/1000374/Pdfium.Net PdfiumViewer:https://github.com/1000374/Pdfiu ...

  8. (python)每日代码||2024.1.27||类方法与实例方法

    class test(): aaa = 111 bbb = 222 ccc = 333 @classmethod def cm(cls): cls.aaa="***" def im ...

  9. ElasticSearch7.3学习(十)----采用restful风格对索引的增删改查

    1. 为什么需要手动创建索引 直接put数据 PUT index/_doc/1,es会自动生成索引,并建立动态映射dynamic mapping.这样的话很大可能与实际的需求不服,在实际的应用上,我们 ...

  10. MySQL 报错:ERROR 2002 (HY000): Can't connect to local MySQL server through socket

    MySQL 报错:ERROR 2002 (HY000): Can't connect to local MySQL server through socket 一.错误现场还原: 下面我们通过三种方式 ...