在我的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();
});
})();
答案 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)
答案是否定的。不是多余的。
<强>原因:强>
$(document).ready(function() {})();
仅在dom元素完全构建后才会触发。所以基本上没有必要将$(document).ready(function() {})();
括在(function(){ ... })();
中。因为前一部分将等待所有dom元素准备好,后者将立即开始执行。
注意:强>
现在,如果我们使用纯javascript并且我们想在dom准备好之后执行某些操作,那么只需在结束正文标记</body>
之前加载脚本。