我们可以在另一个JS文件中调用用一个JavaScript编写的函数吗?

Hem*_*mar 187 javascript include

我们可以在另一个JS文件中调用写在一个JS文件中的函数吗?任何人都可以帮我如何从另一个JS文件调用该函数?

Edg*_*dez 203

只要在第一次使用函数之前加载了包含函数定义的文件,就可以调用该函数,就像它在同一个JS文件中一样.

File1.js

function alertNumber(number) {
    alert(number);
}
Run Code Online (Sandbox Code Playgroud)

File2.js

function alertOne() {
     alertNumber("one");
}
Run Code Online (Sandbox Code Playgroud)

HTML

<head>
....
    <script src="File1.js" type="text/javascript"></script> 
    <script src="File2.js" type="text/javascript"></script> 
....
</head>
<body>
....
    <script type="text/javascript">
       alertOne();
    </script>
....
</body>
Run Code Online (Sandbox Code Playgroud)

另一种方式是行不通的. 正如Stuart Wakefield正确指出的那样.另一种方式也可行.

HTML

<head>
....
    <script src="File2.js" type="text/javascript"></script> 
    <script src="File1.js" type="text/javascript"></script> 
....
</head>
<body>
....
    <script type="text/javascript">
       alertOne();
    </script>
....
</body>
Run Code Online (Sandbox Code Playgroud)

什么是行不通的:

HTML

<head>
....
    <script src="File2.js" type="text/javascript"></script> 
    <script type="text/javascript">
       alertOne();
    </script>
    <script src="File1.js" type="text/javascript"></script> 
....
</head>
<body>
....
</body>
Run Code Online (Sandbox Code Playgroud)

虽然alertOne在调用它时定义,但在内部它使用的函数仍未定义(alertNumber).


Stu*_*eld 65

上面的答案有一个错误的假设,即包含文件的顺序很重要.因为在调用alertOne函数之前不会调用alertNumber函数.只要两个文件都包含在时间alertOne被调用,文件的顺序无关紧要:

[HTML]

<script type="text/javascript" src="file1.js"></script>
<script type="text/javascript" src="file2.js"></script>
<script type="text/javascript">
    alertOne( );
</script>
Run Code Online (Sandbox Code Playgroud)

[JS]

// File1.js
function alertNumber( n ) {
    alert( n );
};
// File2.js
function alertOne( ) {
    alertNumber( "one" );
};
// Inline
alertOne( ); // No errors
Run Code Online (Sandbox Code Playgroud)

或者可以像下面那样订购:

[HTML]

<script type="text/javascript" src="file2.js"></script>
<script type="text/javascript" src="file1.js"></script>
<script type="text/javascript">
    alertOne( );
</script>
Run Code Online (Sandbox Code Playgroud)

[JS]

// File2.js
function alertOne( ) {
    alertNumber( "one" );
};
// File1.js
function alertNumber( n ) {
    alert( n );
};
// Inline
alertOne( ); // No errors
Run Code Online (Sandbox Code Playgroud)

但如果你这样做:

[HTML]

<script type="text/javascript" src="file2.js"></script>
<script type="text/javascript">
    alertOne( );
</script>
<script type="text/javascript" src="file1.js"></script>
Run Code Online (Sandbox Code Playgroud)

[JS]

// File2.js
function alertOne( ) {
    alertNumber( "one" );
};
// Inline
alertOne( ); // Error: alertNumber is not defined
// File1.js
function alertNumber( n ) {
    alert( n );
};
Run Code Online (Sandbox Code Playgroud)

它只涉及执行时可用的变量和函数.定义函数时,它不执行或解析在该函数随后被调用之前声明的任何变量.

包含不同的脚本文件与在同一文件中按该顺序排列的脚本没有区别,但延迟脚本除外:

<script type="text/javascript" src="myscript.js" defer="defer"></script>
Run Code Online (Sandbox Code Playgroud)

那你需要小心.

  • 这可能听起来很挑剔,但包含与连接脚本并不完全相同。考虑 script1: `function myfunction() {` 和 script2: `alert();}` 它不会工作。这让我很困扰,因为我试图模块化一个太长的 js 文件。请参阅http://stackoverflow.com/questions/20311604/module-pattern-how-to-split-the-code-for-one-module-into- Different-js-files/20311661?noredirect=1#20311661 (2认同)

jba*_*all 13

只要两者都被网页引用,是的.

您只需调用函数,就好像它们位于同一个JS文件中一样.


Kam*_*ski 9

ES6:不是<script>在 .html中包含许多 js 文件,您可以只包含一个主文件,例如script.js使用属性type="module"support),并且在内部script.js您可以包含其他文件:

<script type="module" src="script.js"></script>
Run Code Online (Sandbox Code Playgroud)

script.js文件中包含另一个这样的文件:

import { hello } from './module.js';
...
// alert(hello());
Run Code Online (Sandbox Code Playgroud)

在“module.js”中,您必须导出您将导入的函数/类

export function hello() {
    return "Hello World";
}
Run Code Online (Sandbox Code Playgroud)

工作示例在这里


Pra*_*pta 6

如果包含所有文件,则可以将属性从一个文件调用到另一个文件(如函数,变量,对象等)

您在一个.js文件中编写的js函数和变量 - 比如a.js将可用于其他js文件 - 比如b.js,只要a.jsb.js都包含在文件中,使用以下包含机制(如果b.js中的函数调用a.js中的函数,则按相同的顺序).

<script language="javascript" src="a.js"> and 
<script language="javascript" src="b.js">
Run Code Online (Sandbox Code Playgroud)