JS笔记:方法两次调用,执行不同分支(公共变量,闭包,类三种方法实现)
好家伙,
当我们对一个方法进行两次调用,我们希望第一次执行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笔记:方法两次调用,执行不同分支(公共变量,闭包,类三种方法实现)的更多相关文章
- JS变量和变量交换的三种方法
一.what 变量就是用来存储数据的容器 二.how 通过var 关键字定义一个变量 var n1; //定义变量 变量的赋值:通过赋值运算符“=” 给变量赋值. var n2=123; //定义变量 ...
- [CentOS] 环境变量设置的三种方法
在CentOS系统中添加环境变量的方法有几种,推荐第三种方法.这里以添加 TexLive 2017 的环境变量为例进行说明. 1. 修改 ~/.bash_profile 文档,在文末添加以下代码: ...
- mysql 变量赋值的三种方法
mysql中变量不用事前申明,在用的时候直接用“@变量名”使用就可以了.第一种用法:set @num=1; 或set @num:=1; //这里要使用变量来保存数据,直接使用@num变量第二种用法:s ...
- Python类三种方法,函数传参,类与实例变量(一)
1 Python的函数传递: 首先所有的变量都可以理解为内存中一个对象的'引用' a = 1 def func(a): a = 2 func(a) print(a) # 1 a = 1 def fun ...
- Linux下环境变量设置的三种方法
如想将一个路径加入到$PATH中,可以像下面这样做: 1.控制台中设置,不赞成这种方式,因为他只对当前的shell 起作用,换一个shell设置就无效了:$PATH="$PATH" ...
- go语言中获取变量类型的三种方法
package main import ( "fmt" "reflect" ) func main() { var num float64 = 3.14 // ...
- python 多线程编程之threading模块(Thread类)创建线程的三种方法
摘录 python核心编程 上节介绍的thread模块,是不支持守护线程的.当主线程退出的时候,所有的子线程都将终止,不管他们是否仍在工作. 本节开始,我们开始介绍python的另外多线程模块thre ...
- 【Cocos2d-x游戏开发】解决Cocos2d-x中文乱码的三种方法
众所周知,Cocos2d-x是一款不错的开源引擎,但是在Cocos2d-x中直接使用中文是无法正确显示的.比如下面的情况: 解决这个问题常用的有三种方法:1.通过转换为UTF-8编码来显示.2.使用i ...
- 【转载】取得系统中网卡MAC地址的三种方法
From:http://blog.csdn.net/zhangting1987/article/details/2732135 网卡地址这个概念有点混淆不清.因为实际上有两个地址,mac地址和物理地址 ...
- linux 环境变量PATH路径的三种方法
转:http://www.jb51.net/LINUXjishu/150167.html 总结:修改1.#PATH=$PATH:/etc/apache/bin 或者#vi /etc/profile ...
随机推荐
- [转帖] Linux命令拾遗-软件资源观测
https://www.cnblogs.com/codelogs/p/16060443.html 原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介# 这是Linux ...
- Linux 内核参数
/proc/sys/net/ipv4: ip_local_port_range:定义了TCP或UDP对目标发起连接所选择的本地端口范围(除ip_local_reserved_ports之外),其定义受 ...
- expres实现登录与修改密码
登录模块 如果登录的时候,昵称在数据库中查询的是不唯一值.需要提示用户登录失败. 即使用户密码输入正确. 然后将该消息通知相关人员,立即进行排查问题. var express = require('e ...
- Ant Design Vue中Table对齐方式显示省略号
Ant Design Vue中Table对齐方式显示省略号 <template> <!-- bordered 表示表格中的边框 pagination="false" ...
- 如何将axios封装成一个插件
01==>重新写axios的插件 在src下创建一个插件文件为plugins 在创建一个http.js文件 根据官方插件 重新写axios的插件 http.js文件如下 import axios ...
- elementui中自定义Select选择器样式自定义
<el-select class="my-el-select" v-model="tenantCont" placeholder="请输入机构标 ...
- 【解决了一个小问题】在某个linux基础镜像中安装python特定的版本
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 在某个基础镜像中,安装了python3.6.但是一个测试需 ...
- 【JS 逆向百例】有道翻译接口参数逆向
逆向目标 目标:有道翻译接口参数 主页:https://fanyi.youdao.com/ 接口:https://fanyi.youdao.com/translate_o?smartresult=di ...
- 独立安装VS的C++编译器build tools
Microsoft C++ 生成工具 Microsoft C++ 生成工具 - Visual Studio Microsoft C++ 生成工具通过可编写脚本的独立安装程序提供 MSVC 工具集,无需 ...
- mermaid图详解(一)流程图|超详细的代码解释
本文参考Github项目 https://github.com/mermaid-js/mermaid/ 前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客 ...