如何将jQuery.ready与其他匿名自执行函数一起使用?

时间:2013-01-20 13:43:01

标签: jquery document-ready self-executing-function

我读到的关于自动执行匿名函数的内容越多,我就越感到困惑:)

我的问题是:如果我使用jQuery的document.ready函数,我是否必须将整个app逻辑放在该函数中?如果我在其他一些自执行的匿名函数中有代码,如何从document.ready调用中触发该代码? (不在全局命名空间中放置任何变量?)

Document.ready代码:

$(document).ready(function() {
    // how do I trigger another s.e.a.f. here?  
    var myApp = new App();
    myApp.initialize();
});

我的应用程序逻辑在s.e.a.f。:

(function(window){  
   function App(){
        this.initializeApp = function() {
              // we are initialised!
        }
   }
   // how do I prevent putting 'App' in the global space?
   window.App = App;
})(window);

2 个答案:

答案 0 :(得分:0)

你不能。

与范围之外的函数进行通信的唯一方法是将对象放在全局范围内的某个位置。

相反,您应该在IIFE中调用,以便它能够通过闭包访问本地变量。

答案 1 :(得分:0)

“如何在document.ready call”中触发该代码“

确保首先存在应用程序逻辑,并使用您编写的函数名称。

(function(window){  
   function App(){
        this.initializeApp = function() {
              // we are initialised!
            console.log('initialised');
        }
   }
   window.App = App;
})(window);

$(function(){
    var myApp = new App();
    myApp.initializeApp();  // not myApp.initialize(); 
});

// how do I prevent putting 'App' in the global space?

这是一个单独的问题......

使用单独的实例。

jQuery(document).ready(function($){  
   function App(){
        this.initializeApp = function() {
              // we are initialised!
            console.log('initialised');
        }
   }
   // how do I prevent putting 'App' in the global space?

    var myApp = new App();
    myApp.initializeApp();    
});

jQuery(document).ready(function($){
    var myApp = new App(); // this will throw an error - it doesn't exist here
});