하나의 JavaScript로 작성된 함수를 다른 JS 파일로 호출 할 수 있습니까?


193

한 JS 파일로 작성된 함수를 다른 JS 파일로 호출 할 수 있습니까? 다른 JS 파일에서 함수를 호출하는 방법을 알려주는 사람이 있습니까?

답변:


213

함수 정의를 포함하는 파일이 함수를 처음 사용하기 전에로드 된 경우 동일한 JS 파일에있는 것처럼 함수를 호출 할 수 있습니다.

즉

File1.js

function alertNumber(number) {
    alert(number);
}

File2.js

function alertOne() {
     alertNumber("one");
}

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>

다른 방법으로는 작동하지 않습니다. 스튜어트 웨이크 필드가 올바르게 지적했듯이 . 다른 방법으로도 효과가 있습니다.

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>

작동하지 않는 것은 다음과 같습니다.

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>

alertOne호출 할 때 정의 되지만 내부적으로 여전히 정의되지 않은 함수를 사용합니다 ( alertNumber).


JS 가져 오기 메소드를 사용하여 JS 스크립트 메소드 내보내기가있는 다른 JS 파일에서 메소드를 가져 오는 방법에 Index.html 파일에 JS 파일을 포함시켜 예제와 다른 점은 무엇입니까?
— Phil

68

위의 답변에는 파일 포함 순서가 중요하다는 잘못된 가정이 있습니다. alertNumber 함수는 alertOne 함수가 호출 될 때까지 호출되지 않습니다. 두 파일이 시간별로 포함되어있는 한 alertOne은 파일의 순서는 중요하지 않습니다.

[HTML]

<script type="text/javascript" src="file1.js"></script>
<script type="text/javascript" src="file2.js"></script>
<script type="text/javascript">
    alertOne( );
</script>

[JS]

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

또는 다음과 같이 주문할 수 있습니다.

[HTML]

<script type="text/javascript" src="file2.js"></script>
<script type="text/javascript" src="file1.js"></script>
<script type="text/javascript">
    alertOne( );
</script>

[JS]

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

그러나 당신이 이것을해야한다면 :

[HTML]

<script type="text/javascript" src="file2.js"></script>
<script type="text/javascript">
    alertOne( );
</script>
<script type="text/javascript" src="file1.js"></script>

[JS]

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

실행 시점에 사용 가능한 변수와 함수에 대해서만 중요합니다. 함수가 정의되면 해당 함수가 호출 될 때까지 선언 된 변수를 실행하거나 해결하지 않습니다.

다른 스크립트 파일의 포함은 지연된 스크립트를 제외하고 동일한 파일 내에서 순서대로있는 스크립트와 다르지 않습니다.

<script type="text/javascript" src="myscript.js" defer="defer"></script>

조심해야합니다.


1
너무 조금도 마찬가지로
— 스튜어트 웨이크 필드 8

1
이것은 nitpicking처럼 들리지만 포함은 스크립트를 연결하는 것과 정확히 동일하지 않습니다. script1 : function myfunction() {및 script2 : alert();}작동하지 않습니다. 너무 긴 js 파일을 모듈화하려고했기 때문에 문제가 발생합니다. 참조 stackoverflow.com/questions/20311604/...
— 보양

함수 this중 하나가 클래스에있는 경우이 함수가 컨텍스트를 공유 합니까?
— aks

this함수가 호출되는 지점에 bind미리 바인딩되어 있습니다 ( 사전 호출 되지 않는 한 ). 두 개의 개별 파일에있는 두 함수는 this컨텍스트를 자동으로 공유하지 않습니다 . 위의 예 에서는 컨텍스트 가 없습니다 ( this예 : window엄격하지 않은 undefined모드 또는 엄격 모드). this함수를 객체의 멤버로 (즉 생성자 내에서 this.method = myOtherFunc) 할당 하거나 바인드를 사용하여 다른 스크립트의 함수가 동일한 값을 공유하도록 할 수 있습니다. 더 자세한 답변이 필요하면 SO 질문을 더 자세히 게시하십시오. 건배, 스튜어트
— 스튜어트 웨이크 필드

13

웹 페이지에서 둘 다 참조하는 한 가능합니다.

동일한 JS 파일에있는 것처럼 함수를 호출하기 만하면됩니다.


7

모든 파일이 포함 된 경우 한 파일에서 다른 파일로 속성 (예 : 함수, 변수, 객체 등)을 호출 할 수 있습니다 .

JS 기능과 하나 개의 .js 파일에 작성하는 것이 변수 - 말의 a.js이 다른 JS 파일을 사용할 수 있습니다 - 말의 b.js 길이로 양쪽으로 a.js 및 b.js는 다음을 포함 사용하여 파일에 포함되어 있습니다 메커니즘 ( b.js의 함수가 a.js의 함수를 호출하는 경우 동일한 순서)

<script language="javascript" src="a.js"> and 
<script language="javascript" src="b.js">

4

ES6 :<script> .html에서 사용하는 많은 js 파일을 포함하는 대신 script.js속성 type="module"( support )을 사용하여 하나의 기본 파일 만 포함 할 수 있으며 내부 script.js에는 다른 파일을 포함 할 수 있습니다.

<script type="module" src="script.js"></script>

그리고 script.js파일에 다음과 같은 다른 파일을 포함하십시오.

import { hello } from './module.js';
...
// alert(hello());

'module.js'에서 가져올 함수 / 클래스 를 내 보내야합니다.

export function hello() {
    return "Hello World";
}

실제 사례는 여기 .


3

그래 넌 할수있어 . 당신은 모두를 참조 할 필요가 JS file받는 .aspx페이지

<script language="javascript" type="text/javascript" src="JScript1.js">
 </script>

    <script language="javascript" type="text/javascript" src="JScript2.js">
    </script>

JScript1.js

function ani1() {
    alert("1");
    ani2();
}
JScript2.js
function ani2() {
    alert("2");
}

0

작업중인 파일에서 다른 js 파일로 작성된 함수를 호출 할 수 있습니다. 따라서이를 위해 먼저 외부 js 파일을 HTML 문서에 다음과 같이 추가해야합니다.

<html>
<head>
    <script type="text/javascript" src='path/to/external/js'></script>
</head>
<body>
........

외부 자바 스크립트 파일에 정의 된 함수-

$.fn.yourFunctionName = function(){
    alert('function called succesfully for - ' + $(this).html() );
}

현재 파일에서이 함수를 호출하려면 다음과 같이 함수를 호출하십시오.

......
<script type="text/javascript">
    $(function(){
        $('#element').yourFunctionName();
    });
</script>

매개 변수를 함수에 전달하려면 함수를 다음과 같이 정의하십시오.

$.fn.functionWithParameters = function(parameter1, parameter2){
        alert('Parameters passed are - ' + parameter1 + ' , ' + parameter2);
}

그리고 현재 파일 에서이 함수를 다음과 같이 호출하십시오.

$('#element').functionWithParameters('some parameter', 'another parameter');

1
어디에서나 jQuery를 가정하지 마십시오. 또한 $.fn문서 준비 조항에 과제를 배치하는 것은 의미가 없습니다
— Bergi

좋아, 나는 다음에 그것을 명심할 것이다 :), 왜 $ .fn 대입이 의미가 없는지 설명 할 수 있습니까?
— sheetal

할당이 아니라 포장.
— Bergi

문서가 준비되지 않은 경우에만 $ .fn 만 함수 작성에 사용해야합니다.
— sheetal

그런데 왜? 함수가 DOM을 기다릴 필요가 없다는 선언. 전화가 오더라도 (그러나 종종 충분하지는 않습니다).
— Bergi

0

다음은 CodePen 스 니펫이 첨부 된보다 구체적인 예입니다.

1.js

function fn1() {
  document.getElementById("result").innerHTML += "fn1 gets called";
}

2.js

function clickedTheButton() {
  fn1();
} 

index.html

<html>
  <head>
  </head>
  <body>
    <button onclick="clickedTheButton()">Click me</button>
    <script type="text/javascript" src="1.js"></script>
    <script type="text/javascript" src="2.js"></script>
  </body>
 </html>

산출

산출.  버튼 + 결과

이 CodePen 코드 조각을 사용해보십시오 : link .


0

글쎄, 나는 또 다른 달콤한 해결책을 발견했습니다.

window['functioName'](params);


0

Node.js (서버 측에서 스크립트 실행) 에서이 작업을 수행하려는 사람들은 또 다른 옵션을 사용 require하고module.exports 입니다. 다음은 모듈을 만들고 다른 곳에서 사용하기 위해 내보내는 방법에 대한 간단한 예입니다.

file1.js

const print = (string) => {
    console.log(string);
};

exports.print = print;

file2.js

const file1 = require('./file1');

function printOne() {
    file1.print("one");
};
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.