2

在我的 javascript 代码中,我有一个立即执行的自执行匿名函数。在里面我有document.ready()它确保在做东西之前dom已经准备好。只是想知道我的代码中的 document.ready 是否是多余的。

(function() {
"use strict";
var app = {
    init: function () {
        app.addLun('Hello');
        $('#some_id').on('click', this.changeStuff);
    },
    changeStuff: function(e) {
        e.preventDefault();
        $('#some_id').text("Cool text");
    },
    addLun: function(a) {
        console.log(a);
    }
};
$(document).ready(function() {
    app.init();
});
})();
4

4 回答 4

4

自执行匿名函数和 jQuery 的ready事件处理程序彼此没有任何关系,所以不,它不是多余的。

于 2013-07-28T07:00:31.030 回答
2

一般来说,没有。立即调用的函数表达式将被立即调用,而$(document).ready可能会延迟执行。如果您知道整个代码块将在 DOM 准备好后执行,那么可以肯定,这是多余的,但情况可能并非如此。

但是,您可以将立即调用的函数表达式替换为将整个块传递给$(document).ready,例如:

$(document).ready(function() {
    "use strict";
    var app = {
        // ...
    };
    app.init();
});
于 2013-07-28T07:01:17.140 回答
0

答案是否定的。它不是多余的。

原因:

  1. 自调用函数会立即运行,即一旦在 Javascript 中遇到就会执行。
  2. $(document).ready(function() {})();只有在完全构建 dom 元素后才会触发。

$(document).ready(function() {})();所以基本上,用. 括起来是没有意义的(function(){ ... })();。因为前者将等待所有 dom 元素准备好,后者将立即开始执行。

笔记:

现在,如果我们使用纯 javascript 并且我们想在 dom 准备好之后执行一些东西,那么只需在结束 body 标记之前加载脚本</body>

参考这个链接

于 2013-07-28T07:09:40.660 回答
0

如果您不编写 $(document).ready 部分,那么您将在 init 函数中访问 $('#some_id') 而无需等待 $(document).ready 事件,这自然不会起作用。使用 document.ready,它可以工作,并且与以下代码具有相同的结果:

$(document).ready(function()
{
    "use strict";

    var app = {
        init: function () {
            app.addLun('Hello');
            $('#some_id').on('click', this.changeStuff);
        },
        changeStuff: function(e) {
            e.preventDefault();
            $('#some_id').text("Cool text");
        },
        addLun: function(a) {
            console.log(a);
        }
    };

    app.init();
});
于 2013-07-28T07:04:44.240 回答