我的项目中有几个js文件具有以下结构:
(function (window, $) {
var reload = function (force) { /* implementation here */ };
//more variables are here, the same construction as above
})(this, $);
更多此类文件,对于网站的每个部分(页面),都有一个具有此结构的js来管理页面。整个站点是一个单独的页面,这些js文件通过隐藏,显示和填充内容来管理DOM节点,这给用户带来他/她导航的错觉抛出多个页面。
我想简单解释上面的构造是如何加载的 - 我看到head.js库加载了所有那些js脚本,但我不明白加载的位置,如何访问它
我想知道如何自己访问我需要的特定重载()。正如我告诉你的那样,更多具有相同结构的js文件(resources.js,users.js,reports.js等)。我如何访问内部的重新加载功能,比如说,按下html中按钮的reports.js我加载了所有这些脚本?
答案 0 :(得分:1)
只考虑代码片段,#2的答案是:您无法从外部访问reload
。它被声明为“立即调用的函数表达式”的局部变量,这个函数在定义后立即调用(我希望它回答#1)。
通常,这用于创建将公开某些方法和属性的模块。例如,如果代码是:
var obj = (function (window, $) {
var reload = function (force) { /* implementation here */ };
return {
reload : reload
};
})(this, $);
然后你可以用
调用realod
obj.reload();
答案 1 :(得分:1)
除非修改这些.js文件,否则无法访问这些变量。
(function (window, $) {
var reload = function (force) { /* implementation here */ };
//more variables are here, the same construction as above
window.reload = reload;
})(this, $);
上面的代码使得变量/方法reload
可以从代码外部获得。
答案 2 :(得分:1)
这是一个自我调用的函数,这是一种很好的做法,以避免重用变量标识符并破坏第三方代码。
另一点是在自调用函数内声明的变量在函数体的范围内和全局范围内都可用。这也很好,因为在函数结束时可以收集脚本期间创建的“垃圾”(好吧,如果你在 clousure 中使用它们,并不总是这样)。
另外,既然你在函数作用域中声明了这些变量,那么在自己的“自调用函数作用域”中执行操作的其他库将使用像你这样的变量和函数标识符,但它们都没有问题,因为两者都不同作用域!
function (window, $)
在上述签名的情况下,自调用函数有两个输入参数:
声明这样的输入参数可以避免很多问题,因为可以重用window
标识符并存储另一个对象,但在自我调用的函数范围内,window
将保持{{1}无论如何,因为它是一个不同的参考。
如何访问内部的重新加载功能,比如说,报道.js 按下html中的按钮我加载了所有这些脚本?
您正在声明存储整个Window
函数的局部变量。要在任何范围内访问它,您需要在全局范围中声明它:
reload()