从另一个.js文件调用javascript函数

时间:2010-12-02 12:41:09

标签: javascript jquery

我有两个外部.js文件。第一个包含一个函数。第二个调用函数。

file1.js

$(document).ready(function() {

    function menuHoverStart(element, topshift, thumbchange) {

        ... function here ...

    } 

});

file2.js

$(document).ready(function() {

    setTimeout(function() { menuHoverStart("#myDiv", "63px", "myIMG"); },2000); 

});

问题是这没有运行该功能。我需要两个单独的文件,因为file2.js是根据特定条件动态插入的。如果我在file1.js

的末尾包含setTimeout ...行,则此函数有效

有什么想法吗?

2 个答案:

答案 0 :(得分:45)

问题是,menuHoverStart在其范围之外是不可访问的(由文件#1中的.ready()回调函数定义)。您需要在全局范围内(或通过全局范围中可用的任何对象)使此功能可用:

function menuHoverStart(element, topshift, thumbchange) {
    // ...
}

$(document).ready(function() {
    // ...
});

如果您希望menuHoverStart保留在.ready()回调中,则需要手动将该函数添加到全局对象(使用函数表达式):

$(document).ready(function() {
    window.menuHoverStart = function (element, topshift, thumbchange) {
        // ...
    };
    // ...
});

答案 1 :(得分:5)

您已在函数内声明menuHoverStart(您传递给准备就绪的匿名函数)。这限制了它对该函数的范围,你无法从该函数外部调用它。

它没有任何东西,因此在准备好的事件触发之前不需要暂停定义它,所以你可以将它移到匿名函数之外。

也就是说,全局变量是值得避免的,所以你可能更喜欢定义命名空间(以减少名称冲突的风险)并将该函数挂起。

var MYNAMESPACE = {}; // In the global scope, not in a function
// The rest can go anywhere though
MYNAMESPACE.menuHoverStart = function (element, topshift, thumbchange) {