好家伙,

 

当我们对一个方法进行两次调用,我们希望第一次执行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. [转帖]oracle如何删除datafile,误删除Oracle datafile 无法打开数据库

    1.在Oracle open方式下,直接从OS上删除了datafile文件. rm /u02/rmants.dbf 2.数据库关闭后,无法打开数据库,只能到mount状态. SQL> alter ...

  2. 400G 光模块的价格

    400G 光模块的价格  令人惊叹... https://www.fs.com/cn/c/40g-100g-transceivers-889?pro_type=&sortby=priced&a ...

  3. docker 镜像导出和导入(适用于内网无法拉镜像的问题)

    1.在外网将镜像从指定的仓库拉下来 docker pull consul 现在已将consul镜像拉到了可连外网的服务器  2.将镜像把包到指定的tar文件中 docker save consul:l ...

  4. 如何在 Linux 上使用 NPOI

    由于 NPOI 使用 System.Drawing.Common,因此在 Linux 系统上必须安装 libgdiplus 和 libc6. Ubuntu 16.04+ apt-get install ...

  5. C/C++ Npcap包实现数据嗅探

    npcap 是Nmap自带的一个数据包处理工具,Nmap底层就是使用这个包进行收发包的,该库,是可以进行二次开发的,不过使用C语言开发费劲,在进行渗透任务时,还是使用Python构建数据包高效,这东西 ...

  6. 使用symbolicatecrash工具符号化Crash日志

    对于打包上线的APP,或者打包测试的APP,出现了崩溃并不能方便的把手机链接到电脑使用XCode自动符号化,此时手动符号化就是重要的选项. 1.查找符号化工具symbolicatecrash find ...

  7. 【技能篇】解决vs编译器scanf等函数不安全问题【手把手操作-一分钟解决】

    [技能篇]解决Vs编译器scanf等函数不安全问题 文章目录 说在前面 博主给大家的福利 解决方案 解决过程 尾声 说在前面 大家刚开始学习编程的时候,使用vs编译器.使用scanf等函数的时候遇到的 ...

  8. Bi-VAEGAN:对TF-VAEGAN提出的视觉到语义进一步改进

    论文"Bi-directional Distribution Alignment for Transductive Zero-Shot Learning"提出Bi-VAEGAN,它 ...

  9. 探索C语言结构体:编程中的利器与艺术

    欢迎大家来到贝蒂大讲堂 养成好习惯,先赞后看哦~ 所属专栏:C语言学习 贝蒂的主页:Betty's blog 1. 常量与变量 1. 什么是结构体 在C语言中本身就自带了一些数据类型,如:char,i ...

  10. MySQL最左匹配原则

    最左匹配原则都是针对联合索引来说的,那么为什么要使用联合索引呢? 一.为什么要使用联合索引? 1.减少开销. 建一个联合索引(col1,col2,col3),实际相当于建了(col1),(col1,c ...