从一个需要另一个JavaScript文件的函数中调用函数

9
我正在尝试从一个 JavaScript 文件中调用另一个 JavaScript 文件中编写的函数。我有以下代码,但它不起作用:

我的 HTML 文件

<script type="text/javascript" src="js1.js"></script>
<script type="text/javascript" src="js2.js"></script>
<script language="javascript">
    js1();
</script>

js1.js

function js1()
{
    alert("Hello from js1");
    js2();
}

js2.js

function js2() 
{
    alert("Hello from js2");
}

我能做什么?

是的,你绝对可以这样做,但你必须确保以正确的顺序包含文件,以便在尝试调用该函数之前已经将函数代码加载到你的文档中。 - HartleySan
根据上述顺序,您可以在js2或页面中调用js1函数。 - Deepu Madhusoodanan
1
这是你的整个HTML文件吗?如果是,它是否与JavaScript文件在同一个文件夹中? - doppelgreener
script标签的language属性已经被弃用。在HTML5中,请使用type或不写(也是合法的)。请参考https://dev59.com/BHE95IYBdhLWcg3wi-ee。 - John Dvorak
2个回答

7

尝试更改顺序

<script type="text/javascript" src="js2.js"></script>
<script type="text/javascript" src="js1.js"></script>
<script language="javascript">
   js1();
</script>

因为你在 js1.js 中调用了 js2();,所以在执行脚本 js1.js 之前应该先执行脚本 js2.js
就你的情况而言,我认为即使不改变顺序也应该还能正常工作,因为你是在一个函数内调用了 js2();。当执行这个脚本时:
function js1()
{
   alert("Hello from js1");
   js2();
}

即使 js2.js 还没有被执行,但是你此时并没有实际调用 js2();

只需尝试一下以查看其是否有效。


1
“因为你在函数内部调用了js2();”并不是充分的条件。相反,“...在fn2被定义后运行的函数”才是。 - John Dvorak
1
@Jan Dvorak:我更新了我的答案。我猜测 OP 的代码中还有另一个问题,这个问题在问题描述中没有显示出来。 - Khanh TO
1
没错。如果文件已经加载,提问者的代码应该可以正常工作。据我所知,你的建议不会有帮助。 - John Dvorak
@Jan Dvorak:你说得对,我只是建议他应该考虑脚本执行的顺序。这个建议在这种情况下可能没有帮助。但总的来说,他应该关注这个问题。 - Khanh TO

3
我会假设这是您的整个HTML页面。
为了使这些脚本运行,您需要将这些JavaScript文件与您的网页放在同一个文件夹中,并实际上拥有一个适当的HTML页面!
在您的HTML页面中,您需要在head或body中包含对js1和js2文件的引用,并在body中包含您自己编写的脚本,以便在加载时执行:
<!DOCTYPE html>
<!-- ^ Declaring this DOCTYPE means this is a HTML5 page. -->
<html>
    <head>
        <!-- This will load your scripts into the document. -->
        <script src="js1.js"></script>
        <script src="js2.js"></script>
        <!--
            In a HTML5 page, you don't need to include the
            'type="text/javascript"' attribute on script tags.
            They're treated as having that by default, unless you say otherwise.
        -->
    </head>
    <body>
        <!--
            You could also include your scripts here, but I'll
            just leave these commented out since they're already included.
        <script src="js1.js"></script>
        <script src="js2.js"></script>
        -->
        <script>
        js1();
        </script>
        <!--
            You don't need 'language="javascript"' on a script tag.
            Use the type attribute, or nothing in a HTML5 page.
        -->
    </body>
</html>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接