加载超出范围的功能

时间:2014-10-07 19:12:59

标签: javascript jquery

我有一个页面,它在自身顶部加载一个包含大多数JQuery函数的文件。

所以在文件中就是例如:

$().ready(function() {
  function foo(){
    doSomething;
  }
}

现在,在该特定页面的末尾,我想使用之前加载的文件中的一个函数。

当我致电foo();时,我说foo is not defined,我的问题是我可以调用该函数吗?如果是这样的话?

我也尝试过:

window.onload = function(e){
  foo();
}

但同样的错误

4 个答案:

答案 0 :(得分:2)

在全球范围内声明它。

var foofn;
$().ready(function() {
  foofn = function(){
    doSomething;
  }
})

答案 1 :(得分:1)

这里的问题是你在传递给ready jQuery方法的匿名函数范围内声明了这个函数。

$().ready(function() {
  function foo(){
    doSomething;
  }
// foo can only be accessed on this scope.
});

您可以使用窗口变量将该函数公开给窗口范围。

$().ready(function() {
  window.foo = function foo(){
    doSomething;
  }
// foo can be accessed on this scope and on the gloabl app scope.
});

答案 2 :(得分:1)

您必须定义全局可访问的foo。而不是function foo(){}尝试window.foo = function(){}

比在window对象上粘贴一堆属性稍微不那么草率的方法是定义一个放置东西的全局对象,例如。

var myApp = {};

$(document).ready(){
    myApp.foo = function(){ doSomething; }
}

这样,稍后在同一页面上执行的脚本将可以访问myApp.foo

答案 3 :(得分:1)

如果需要在全局范围内调用(并且那个很大的话)foo,那么只需在全局范围内声明它 - 没有必要将它隐藏起来作为内部函数$().ready如果不是它将被使用的地方。{/ p>

如果你想避免全球污染,请将整个内容包装在立即调用函数表达式中:

(function() {

    // called when all resources are loaded
    window.onload = function foo() {
        ...
    }; 

    // called when the DOM is ready
    $().ready(function() {
        ...
    });

})();   // invoke now