让自执行函数在dom就绪时运行

Do self executing functions run at dom ready?

本文关键字:就绪 运行 dom 执行 函数      更新时间:2023-09-26

在我听说自执行函数之前,我总是这样做:

$(document).ready(function() {
   doSomething();
});
function doSomething()
{
   // blah
}

一个自执行的函数会有同样的效果吗?它会在dom上运行吗?

(function doSomething($) {
   // blah
})(jQuery);

没有。一个自执行的函数在Javascript引擎找到它时运行。

但是,如果您将所有代码放在文档的结尾</body>标记之前(强烈推荐),那么您不必等待DOM准备好,因为您已经自动通过了。


如果您想要的是$变量的作用域,并且您不想将代码移动到页面的底部,您可以使用:

jQuery(function($){
    // The "$" variable is now scoped in here
    // and will not be affected by any code
    // overriding it outside of this function
});

不会,它会在JavaScript文件执行时立即运行。

不,自动执行的javascript函数会在这里运行。

如果你想创建一个DOM就绪的函数,写下面的代码:

$(function() {
  // this will run on DOM ready
});

的简写
$(document).ready(function() {
});

不,自动执行的函数在你在代码中"声明"之后立即运行。即使它位于外部.js文件中。

在你的例子中,有一种可能性,你的函数将执行和jQuery的值是undefined。如果您希望代码在DOMReady上执行,请继续使用

$(document).ready(function(){
    doSomething(); 
});

$(function(){
    doSomething();
});

或者

window.onload = function(){
    doSomething();
}

$(document).ready(function() { ... });只是将该函数绑定到文档的ready事件,因此,正如您所说,当文档加载时,事件就会触发。

(function($) { ... })(jQuery);

实际上是Javascript的一个结构,所有这段代码所做的就是将jQuery对象作为参数传递给function($)并运行该函数,因此在该函数中,$总是指向jQuery对象。这可以帮助解决命名空间冲突等问题。

所以#1在文档加载时执行,而#2立即运行,使用jQuery对象$作为简写

$(document).ready(function(){ ... }); or short $(function(){...});

这个函数在DOM准备好时被调用,这意味着你可以开始查询元素,例如。ready()将在不同的浏览器上使用不同的方式来确保DOM真的准备好了。

(function(){ ... })();

这只不过是一个函数,当浏览器解释ecma-/javascript时,它会尽快调用自己。因此,在这里成功地操作DOM元素是不太可能的。

jQuery文档。Ready与自调用匿名函数