从函数内调用外部函数-Javascript

从函数内调用外部函数-Javascript,javascript,jquery,jquery-mobile,cordova,Javascript,Jquery,Jquery Mobile,Cordova,我正在使用Phonegap和JQueryMobile创建一个web应用程序。我是javascript新手,遇到了一个问题 我的问题是调用一个名为“testscript.js”的文件中的函数,该函数名为testFunc。testscript.js仅包含以下内容: function testFunc() { console.log("Yes I work"); } 在我的html页面中,我有以下代码: <script> $('#pageListener').live('pa

我正在使用Phonegap和JQueryMobile创建一个web应用程序。我是javascript新手,遇到了一个问题

我的问题是调用一个名为“testscript.js”的文件中的函数,该函数名为testFunc。testscript.js仅包含以下内容:

function testFunc() {
    console.log("Yes I work");
}
在我的html页面中,我有以下代码:

<script>
  $('#pageListener').live('pageinit', function(event) 
    {
     testFunc();
    });
</script>
我可以通过将函数粘贴在html其他地方的脚本标记中来调用函数


我尝试了各种方法调用我的函数,但没有成功,非常感谢您的帮助

只要在PhoneGap触发
pageinit
事件时加载了
testscript.js
,并且假设
testFunc
函数是全局函数,就没有理由不工作

您还没有向我们展示您的
testFunc
,但我猜它不是一个全局函数,而是包含在某些内容中,例如:

$('#pageListener').live('pageinit', function(event) 
{
    function testFunc()
    {
        // Do something here
    }
});
或者只是一个作用域函数

(function() 
{
    function testFunc()
    {
        // Do something here
    }
})();
不管怎样,因为它是在另一个函数中声明的,所以它是该函数的局部函数,而不是全局函数。要从另一个脚本文件调用它,您需要能够从全局名称空间获取它(遗憾的是)。做到这一点的最佳方法是不要让它成为一个全球性的,而是创建一个全球性的,你将把所有共享的东西都放在上面,如下所示:

(function() 
{
    if (!window.MyStuff)
    {
        window.MyStuff = {};
    }
    window.MyStuff.testFunc = testFunc;

    function testFunc()
    {
        // Do something here
    }
})();
$('#pageListener').live('pageinit', function(event) 
{
    MyStuff.testFunc(); // Or: window.MyStuff.testFunc();
});
…你这样称呼它:

(function() 
{
    if (!window.MyStuff)
    {
        window.MyStuff = {};
    }
    window.MyStuff.testFunc = testFunc;

    function testFunc()
    {
        // Do something here
    }
})();
$('#pageListener').live('pageinit', function(event) 
{
    MyStuff.testFunc(); // Or: window.MyStuff.testFunc();
});

您必须在html中的其他jquery代码之前包含testscript.js。像这样:

<script src="testscript.js"></script>

<script>
   $('#pageListener').live('pageinit', function(event) 
   {
      testFunc();
   });
</script>

$('#pageListener').live('pageinit',函数(事件)
{
testFunc();
});

testscript.js看起来像什么?特别是定义位的testFunc?我更新了我的问题,以显示testscript.js文件和testFunc的样子。我认为我的testFunc是全局的。我已经编辑了我的原始问题,以显示testscript.js的外观。谢谢!这就解决了我的问题。然而,我不清楚为什么我需要包含它,因为它已经包含在我正在使用的其他javascript库(Jquery、Jquery mobile等)的head标记之间。你能解释一下吗?@Demonofloom:正如我在回答中所说的,只要PhoneGap调用你的
pageinit
处理程序时
testscript.js
已经加载,它就会工作。如果它在您移动
testscript.js
include时开始工作,这意味着当PhoneGap启动您的处理程序时它还没有被加载——例如,您的脚本链接在页面上的位置太低了。是的。T.J.说得对。只是调用函数时没有加载脚本。