在我听说自我执行功能之前,我总是习惯这样做:
$(document).ready(function() {
doSomething();
});
function doSomething()
{
// blah
}
自执行功能会产生相同的效果吗?它会在dom上运行吗?
(function doSomething($) {
// blah
})(jQuery);
答案 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元素采取行动。