在javascript中自行执行匿名函数

时间:2013-07-28 06:58:02

标签: javascript jquery

在我的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 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

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

$(document).ready(function() {
    "use strict";
    var app = {
        // ...
    };
    app.init();
});

答案 2 :(得分: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();
});

答案 3 :(得分:0)

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

<强>原因:

  1. 自动调用函数会立即运行,即在Javascript中遇到它时会立即执行。
  2. $(document).ready(function() {})();仅在dom元素完全构建后才会触发。
  3. 所以基本上没有必要将$(document).ready(function() {})();括在(function(){ ... })();中。因为前一部分将等待所有dom元素准备好,后者将立即开始执行。

    注意:

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

    REFER THIS LINK