我想在second.js文件中调用在first.js文件中定义的函数。这两个文件都定义在HTML文件中,如下所示:

<script type="text/javascript" src="first.js"></script>
<script type="text/javascript" src="second.js"></script>

我想在second.js中调用first.js中定义的fn1()。从我的搜索答案是,如果first.js是首先定义的,这是可能的,但从我的测试中,我还没有找到任何方法来做到这一点。

这是我的代码:

second.js

document.getElementById("btn").onclick = function() {
    fn1();
}

first.js

function fn1() {
    alert("external fn clicked");
}

当前回答

它应该像这样工作:

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。

其他回答

window.onload = function(){
    document.getElementById("btn").onclick = function(){
        fn1();
    }
   // this should work, It calls when all js files loaded, No matter what position you have written
});

first.js

function first() { alert("first"); }

Second.js

var imported = document.createElement("script");
imported.src = "other js/first.js";  //saved in "other js" folder
document.getElementsByTagName("head")[0].appendChild(imported);


function second() { alert("Second");}

index . html

 <HTML>
    <HEAD>
       <SCRIPT SRC="second.js"></SCRIPT>
    </HEAD>
    <BODY>
       <a href="javascript:second()">method in second js</a><br/>
       <a href="javascript:first()">method in firstjs ("included" by the first)</a>
    </BODY>
</HTML>

如果您的服务器允许使用缓存来提高速度,请使用缓存。

var extern =(url)=> {           // load extern javascript
    let scr = $.extend({}, {
        dataType: 'script',
        cache: true,
        url: url
    });
    return $.ajax(scr);
}
function ext(file, func) {
    extern(file).done(func);    // calls a function from an extern javascript file
}

然后像这样使用它:

ext('somefile.js',()=>              
    myFunc(args)
);  

可选地,为它制作一个原型以使其更加灵活。所以你不需要每次都定义文件,如果你调用一个函数或者你想从多个文件中获取代码。

我的想法是让两个JavaScript调用函数通过DOM。

方法很简单… 我们只需要定义隐藏的js_ipc html标签。 在被调用者注册后,从隐藏的js_ipc标记单击,然后 调用方可以分派单击事件来触发被调用方。 参数是在你想要传递的情况下保存。

当我们需要使用上述方式?

有时候,这两个javascript代码集成起来非常复杂,有很多异步代码。不同的代码使用不同的框架,但是你仍然需要一种简单的方法将它们集成在一起。

所以,在这种情况下,做到这一点并不容易。

在我的项目实现中,我遇到了这种情况,并且它的集成非常复杂。最后我发现我们可以让两个javascript通过DOM相互调用。

我在这段git代码中演示了这种方法。你可以通过这种方式。(或从https://github.com/milochen0418/javascript-ipc-demo阅读)

git clone https://github.com/milochen0418/javascript-ipc-demo
cd javascript-ipc-demo
git checkout 5f75d44530b4145ca2b06105c6aac28b764f066e

在这里,我试着用下面这个简单的例子来解释。我希望这种方式可以帮助你更容易地集成两个不同的javascript代码,因为以前没有任何javascript库来支持两个不同团队的javascript文件之间的通信。

<html>
<head>
    <link rel="stylesheet" type="text/css" href="css/style.css" />
</head>
<body>
    <div id="js_ipc" style="display:none;"></div>
    <div id="test_btn" class="btn">
        <a><p>click to test</p></a>
    </div>    
</body>
<script src="js/callee.js"></script>
<script src="js/caller.js"></script>
</html>

还有代码 css / style.css

.btn {
    background-color:grey;
    cursor:pointer;
    display:inline-block;
}

js/caller.js

function caller_add_of_ipc(num1, num2) {
    var e = new Event("click");
    e.arguments = arguments;
    document.getElementById("js_ipc").dispatchEvent(e);
}
document.getElementById("test_btn").addEventListener('click', function(e) {
    console.log("click to invoke caller of IPC");
    caller_add_of_ipc(33, 22);      
});

JS/被叫方.js

document.getElementById("js_ipc").addEventListener('click', (e)=>{
    callee_add_of_ipc(e.arguments);
});    
function callee_add_of_ipc(arguments) {
    let num1 = arguments[0];
    let num2 = arguments[1];
    console.log("This is callee of IPC -- inner-communication process");
    console.log( "num1 + num2 = " + (num1 + num2));
}

在创建函数时使用“var”,然后您可以从另一个文件访问该函数。确保两个文件都能很好地连接到您的项目,并且可以相互访问。

file_1.js

var firstLetterUppercase = function(str) {
   str = str.toLowerCase().replace(/\b[a-z]/g, function(letter) {
      return letter.toUpperCase();
   });
   return str;
}

从file_2.js文件中访问这个函数/变量

firstLetterUppercase("gobinda");

输出=> Gobinda