-1

我的项目中有几个具有这种结构的 js 文件:

(function (window, $) {
    var reload = function (force) { /* implementation here */ };
    //more variables are here, the same construction as above
})(this, $);

更多这样的文件,对于网站的每个部分(页面)都有一个具有这种结构的js来管理页面。整个站点是一个单独的页面,这些 js 文件通过隐藏、显示和填充内容来管理 DOM 节点,这给用户一种错觉,他/她浏览了多个页面。

  1. 我想简单解释一下如何加载上述结构 - 我看到加载所有这些 js 脚本的 head.js 库,但我不明白加载的位置,如何访问它。

  2. 我想知道如何自己访问我需要的特定 reload() 。正如我告诉你的,更多的 js 文件具有相同的结构(resources.js、users.js、reports.js 等)。我如何访问内部的重新加载功能,比方说,在我加载所有这些脚本的html中按下按钮时的reports.js?

4

3 回答 3

1

仅考虑那段代码,#2 的答案是:您无法reload从外部访问。它被声明为“立即调用的函数表达式”的局部变量,这是一个在定义后立即调用的函数(我希望它回答 #1)。

通常,thats 用于创建将公开一些方法和属性的模块。例如,如果代码是:

var obj = (function (window, $) {

    var reload = function (force) { /* implementation here */ };

    return {
        reload : reload
    };

})(this, $);

realod然后你可以调用

obj.reload();
于 2013-02-26T15:00:34.573 回答
1

除非您修改这些 .js 文件,否则您无法访问这些变量。

(function (window, $) {

    var reload = function (force) { /* implementation here */ };

    //more variables are here, the same construction as above

    window.reload = reload;

})(this, $);

上面的代码使变量/方法reload可以从代码外部获得。

于 2013-02-26T15:00:36.663 回答
1

这是一个自调用函数,这是一种很好的做法,可以避免重复使用变量标识符和破坏第三方代码。

另一点是在自调用函数内声明的变量在函数体范围内或全局范围内都可用。这也很好,因为可以在函数结束时收集脚本期间创建的“垃圾”(好吧,如果您在clousure中使用它们,则并非总是如此)。

此外,由于您在函数范围内声明了此类变量,因此其他库在自己的“自调用函数范围”中执行操作将使用像您一样的变量和函数标识符,但这没问题,因为两者都是不同的范围!

function (window, $)

在上述签名的情况下,自调用函数有两个输入参数:

  • window将保存 JavaScript 浏览器的 Window 对象。
  • $将保存一个快捷方式对象或函数(通常是 jQuery)。

声明这样的输入参数可以避免很多问题,因为可以重用window标识符并存储另一个对象,但在您的自调用函数范围内,无论如何window都会保存该对象,因为它是一个不同的引用。Window

我如何访问内部的重新加载功能,比方说,在我加载所有这些脚本的html中按下按钮时的reports.js?

您正在声明一个存储整个reload()函数的局部变量。为了能够在任何范围内访问它,您需要在全局范围内声明它:

var reload = null;

(function (window, $) {
    // Setting the variable living in the global scope!
    reload = function (force) { /* implementation here */ };

    //more variables are here, the same construction as above

})(this, $);
于 2013-02-26T15:03:45.017 回答