两个JS之间的函数互相调用方式
作者:辰小白 发布时间:2024-04-10 10:39:45
两个JS之间的函数互相调用
这个问题是我在工作中用到的一个方法 因为要做封装
所以想到能不能在一个js中引用另一个js中的function
这样的话能大大的减少代码量
话不多说 先上代码
首先要在html页面引入两个js文件
1.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title> </title>
</head>
<script src="1.js"></script>
<script src="2.js"></script>
<body>
</body>
</html>
1.js
function a(){
alert(1);
}
2.js
a();
这样2.js就可以直接调用1.js中的a函数了
当然这样只是很简单的方法 下面写一个闭包中的方法(当然也很简单啦~~)
1.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title> </title>
</head>
<script src="1.js"></script>
<script src="2.js"></script>
<body>
</body>
</html>
1.js
var dianji;
(function(){
dianji = {
a:function(){
alert(1);
}
}
})()
这里的1.js是一个对象函数而且还是闭包的形式,所以我们要把dianji这个变量提升到全局。这样在2.js中才能调用这个a函数 不然回报变量未定义的错误。
想要js之间互相调用function,那么函数就必须是全局的
2.js
dianji.a();
不同JS文件之间函数的相互调用
当我们使用JavaScript写一个复杂界面的业务逻辑时,经常会把所有的函数写在同一个JS文件中。然而随着功能的不断增加,这个JS文件会变得又臭又长,所有的功能像一团乱麻一样交织在一起,自己都不想回头看。为了避免这种情况的发生,我们应该在开始编码的时候就对不同的功能进行封装(即:将不同的业务逻辑写在不同的JS文件中),进而降低代码的耦合性。
因此,就会出现不同JS文件之间函数的相互调用问题。
调用方法方法很简单:我们只需将不同的JS文件在同一个html文件中引用,即可在任一JS文件中调用其他JS文件中的封装的函数了。
根据调用函数位置的不同,我们可以将函数调用方式分为全局调用和局部调用两类。
需要注意的是:不同的调用方式,细节上稍有区别。
1、全局调用
所谓全局调用,就是在函数外部调用其他JS文件中封装的函数。
(1)被调用的JS文件先引用
例如:test.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
<script src="a.js"></script>
<script src="b.js"></script>
</body>
</html>
注:使用VS Code新建html文件,输入“html:5”,回车即可生成HTMl文件的框架。
a.js
function a()
{
alert("a.js is loading");
}
b.js
a();
function b()
{
alert("b.js is loading");
}
刷新界面,输出:“a.js is loading”,如下图所示。
(2)被调用的JS文件后引用
例如:保持test.html文件不变:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
<script src="a.js"></script>
<script src="b.js"></script>
</body>
</html>
注:使用VS Code新建html文件,输入“html:5”,回车即可生成HTMl文件的框架。
a.js修改为:
b();
function a()
{
alert("a.js is loading");
}
b.js修改为:
function b()
{
alert("b.js is loading");
}
刷新界面,此时会报错b()函数未定义,如下图所示。
因此,全局调用时,被调用的JS文件要先引用。
2、局部调用
所谓局部调用,就是在函数内部调用其他JS文件中封装的函数。
将test.html修改为:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
<script src="a.js"></script>
<script src="b.js"></script>
<input type="button" value="测试" onclick="a1()"/>
</body>
</html>
注:使用VS Code新建html文件,输入“html:5”,回车即可生成HTMl文件的框架。
a.js修改为:
function a1()
{
alert("function a1 run success.");
b();
}
function a2()
{
alert("function a2 run success.");
}
b.js修改为:
function b()
{
alert("function b run success.");
a2();
}
点击“测试”按钮,此时会依次输出:“function a1 run success.”,“function b run success.”,“function a2 run success.”。
由此可见,局部调用时,引用不分先后,想在哪调就在哪调。
心得
若采用全局调用的方式,则被调用的JS文件要先引用;若采用局部调用的方式,则引用不分先后,想在哪调就在哪调。
来源:https://blog.csdn.net/qq493820798/article/details/81216090


猜你喜欢
- 01 示例函数1.1 代码及结果import matplotlib.pyplot as pltimport matplotlib.
- 类型1:父类和子类的实例变量均不需要传递class A(object): def __init__(self):
- I. 前言在前面的一篇文章PyTorch搭建LSTM实现时间序列预测(负荷预测)中,我们利用LSTM实现了负荷预测,但我们只是简单利用负荷预
- 利用networkx,numpy,matplotlib,将邻接矩阵输出为图形。1,自身确定一个邻接矩阵,然后通过循环的方式添加变,然后输出图
- 用read_csv读数据遇到分隔符问题的两种解决方式import pandas as pd1.更改read_csv函数中的传参&ld
- 今儿继续再看老师给推荐的深入浅出mysql数据库开发这本书,看到innodb数据库的外键关联问题时,遇到了一个问题,书上写的是可以对父表进行
- 方式1.打开Windows的cmd,在cmd中输入jupyter notebook --generate-config如下图:
- 最近网站访问量大增,可能有些频道程序也有一些问题,造成了MySQL数据库出现Forcing close of thread 28790 us
- Pandas的apply函数概念(图解)实例1:怎样对数值按分组的归一化实例2:怎样取每个分组的TOPN数据来源:https://blog.
- 我们选择一种问题的解决办法,通常需要考虑到想要达到的效果,还有最重要的是这个办法本身的优缺点有哪些,与其他的方法对比哪一个更好。之前小编之前
- 当用cmd命令行运行python文件时,我们知道可以通过>python pyfile.py来运行python文件,此时的输出会直接打印
- 1、使用empty方法创建数组该方式可以创建一个空数组,dtype可以指定随机数的类型,否则随机采用一种类型生成随机数。import num
- 一、协程介绍协程:英文名Coroutine,是单线程下的并发,又称微线程,纤程。协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度
- 在Web上使用菜单可以极大地节约页面的空间,同时也比较的符合用户从Windows上继承下来的UI操作体验。在以往的Web页菜单设计中,我们普
- <html> 题:<br /> 有n个直线最多可以把一个平面分成多少个部分<br /><br /&
- 一切皆是对象在 Python 一切皆是对象,包括所有类型的常量与变量,整型,布尔型,甚至函数。 参见stackoverflow上的一个问题
- 本篇阅读的代码片段来自于30-seconds-of-python。1. count_bydef count_by(arr, fn=lambd
- Python写入Excel有时需要合并单元格、或者改变文字内容的颜色首先导入xlwt模块import xlwt创建文件名创建Excel工作簿
- keys()方法返回在字典中的所有可用的键的列表。语法以下是keys()方法的语法:dict.keys()参数 &nb
- Swin TransformerSwin Transformer是一种用于图像处理的深度学习模型,它可以用于各种计算机视觉任务,如图像分类、