关闭控制流程

时间:2012-12-28 07:43:21

标签: javascript

我有这个代码块:

(function($, exports) {
    var mod = function(includes) {
        if (includes) this.include(includes);
    };
    mod.fn = mod.prototype;
    mod.fn.proxy = function(func) {
        return $.proxy(func, this);
    };
    mod.fn.load = function(func) {
        $(this.proxy(func));
    };
    mod.fn.include = function(ob) {
        $.extend(this, ob);
    };
    exports.Controller = mod;

})(jQuery, window);

(function($, Controller) {
    mod = new Controller;
    mod.toggleClass = function(e) {
        this.view.toggleClass("over", e.data);
    };
    mod.load(function() {
        this.test = 'test';
        console.log(this.test); // Delayed
        this.view = $("#view");
    });

    console.log(mod.view) // returns undefined
    console.log(mod);

})(jQuery, Controller);

在firefox上执行时,firebug控制台面板上的结果如下:

undefined
Object { toggleClass=function(), proxy=function(), load=function(), more...}
test

这意味着最后两个日志函数(它们位于代码块的底部)在第一个之前执行(即:console.log(this.test); //延迟)

你能用这种方式解释为什么流程会发生吗?

1 个答案:

答案 0 :(得分:2)

  

你能用这种方式解释为什么流程会发生吗?

因为您在传递给load的函数中设置代码以等待DOM准备好,通过(在load函数内)将函数引用传递给jQuery $函数。当你传递一个函数引用时,这是$(document).ready(...)的快捷方式。 DOM准备就绪,直到你的其他代码运行之后才会发生,因此在你的其他输出之后,你不会看到你传递到load的函数内容的输出。