【问题标题】:Calling a javascript function from another .js file从另一个 .js 文件调用 javascript 函数
【发布时间】:2010-12-02 12:41:09
【问题描述】:

我有两个外部 .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... 行,则此功能有效

有什么想法吗?

【问题讨论】:

  • menuHoverStart 是否在全局范围内声明?
  • 可能不会——我该怎么做?

标签: javascript jquery


【解决方案1】:

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

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

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

如果你想让menuHoverStart留在.ready()回调中,你需要手动将函数添加到全局对象中(使用函数表达式):

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

【讨论】:

    【解决方案2】:

    你已经在一个函数中声明了menuHoverStart(你传递给准备就绪的匿名函数)。这将其范围限制为该函数,您不能从该函数外部调用它。

    它在那里没有任何事情,所以在ready事件触发之前没有必要推迟定义它,所以你可以将它移到匿名函数之外。

    也就是说,值得避免使用全局变量,因此您可能更愿意定义一个命名空间(以降低名称冲突的风险)并将函数挂起。

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

    【讨论】:

      猜你喜欢
      • 2017-11-28
      • 2019-01-16
      • 2014-11-15
      • 1970-01-01
      • 2018-06-21
      • 1970-01-01
      • 2023-02-01
      • 1970-01-01
      • 2022-06-10
      相关资源
      最近更新 更多