自动执行功能是否在dom准备就绪?

时间:2011-08-28 18:28:40

标签: javascript jquery function

在我听说自我执行功能之前,我总是习惯这样做:

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

function doSomething()
{
   // blah
}

自执行功能会产生相同的效果吗?它会在dom上运行吗?

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

5 个答案:

答案 0 :(得分:10)

不。当Javascript引擎找到它时,自运行函数就会运行。

但是,如果您在结束</body>标记(highly recommended)之前将所有代码放在文档的末尾,那么您就不必等待DOM就绪,因为你自动过去了。


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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

不,自动执行的javascript函数就在那里运行。

如果要创建DOM就绪函数,请编写以下内容:

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

这是简写:

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

答案 3 :(得分:0)

不,在您在代码上“声明”它之后,自动执行功能立即运行。即使它位于外部.js文件中。

在您的示例中,您的函数可能会执行, jQuery 的值未定义。如果您希望在DOMReady上执行代码,请继续使用

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

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

甚至

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

答案 4 :(得分:0)

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

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

实际上是Javascript的一个构造,所有这段代码都是将jQuery对象作为参数传递给函数($)并运行该函数,因此在该函数中,$ always始终引用jQuery对象。这有助于解决命名空间冲突等问题。

所以#1在文档加载时执行,而#2立即运行,jQuery对象名为$ as shorthand

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

当DOM准备就绪时调用此函数,这意味着您可以开始查询元素。 .ready()将在不同的浏览器上使用不同的方式来确保DOM真的准备就绪。

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

这只不过是一个在浏览器解释你的ecma- / javascript时尽快调用自身的函数。因此,你不太可能在这里成功地对DOM元素采取行动。

jQuery document.ready vs self calling anonymous function