wil*_*age 15 javascript jquery
我的javascript文件变得非常大(3000多行),我对如何布局我的文件和delare函数感到困惑,以便他们可以调用文件中的任何位置.
总结一下我的JS文件目前看起来有点像这样:
//ALL GLOBAL VARIABLES FIRST DECLARED HERE
var var1 , var2 ,var3
$(document).ready(function(){
//JQUERY STUFF
});
//ALL FUNCTIONS THAT NEED TO BE GLOBAL DECLARED HERE
function myFunction(){
//do some stuff here
}
Run Code Online (Sandbox Code Playgroud)
我遇到了这个问题,因为我调用的一些函数似乎在调用时没有被声明或者没有全局可用.这一切都非常令人困惑!
有人可以建议使用某些JS函数,对象和变量来布局大js/jquery文件的最佳方法,可以在文件中的任何位置引用它们.
更新:
所以要简化它是正确的(参见我的评论)?
window.MainModule = (function($, win, doc, undefined) {//WHAT IS BEING PASSED IN HERE?
var foo, bar, modules; //VARIABLES ACCESSIBLE ANYWHERE
var modules["foobar"] = (function() {//WHAT IS A MODULE? WHEN WOULD I USE A SEPERATE MODULE?
var someFunction = function() { ... };//DECLARING MY FUNCTIONS?
...
return {
init: someFunction,//IS THIS WHERE I USE/BIND MY FUNCTIONS TO EVENTS AND ELEMENTS?
...
};
}());
// hoist a variable into global scope
window.Global = someLocal;
return {
init: function() {//FUNCTION TO INIT ALL MODULES?
for (var key in modules) {
modules[key].init();
}
}
};
}(jQuery, this, document));
Run Code Online (Sandbox Code Playgroud)
模块部分没有正确定义......这是一个稍微整理的例子.
window.MainModule = (function($, win, doc, undefined) {
var modules = {};
// -- Create as many modules as you need ...
modules["alerter"] = (function(){
var someFunction = function(){ alert('I alert first'); };
return {
init: someFunction
};
}());
modules["alerter2"] = (function(){
var someFunction = function(){ alert('I alert second'); };
return {
init: someFunction
};
}());
return {
init: function(){
for (var key in modules){
modules[key].init();
}
}
};
}(jQuery, this, document));
$(window.MainModule.init);
Run Code Online (Sandbox Code Playgroud)
// We always use closures don't we?
window.MainModule = (function($, win, doc, undefined) {
var foo, bar, modules; // List of local variables.
var modules["foobar"] = (function() {
var someFunction = function() { ... };
...
return {
init: someFunction,
...
};
}());
// hoist a variable into global scope
window.Global = someLocal;
return {
init: function() {
for (var key in modules) {
modules[key].init();
}
}
};
}(jQuery, this, document));
// Let's kick off the MainModule on $.ready
// I recommend you do this in your `html` with page specific data.
$(window.MainModule.init);
Run Code Online (Sandbox Code Playgroud)
[[免责声明]]:这是一个伪代码模块,为简洁起见,不包括一些标准代码.
var x在主要封闭内部声明的任何内容都可在整个功能中使用.当然除非你设置它,否则它不会被设置为你期望的设置.
控制加载和流程拆分代码到自动执行闭包中自动执行的内容以及inited控制器需要手动执行的页面/用户特定参数.
| 归档时间: |
|
| 查看次数: |
19601 次 |
| 最近记录: |