jQuery document.ready 与自调用匿名函数

IT技术 javascript jquery
2021-01-28 21:44:30

这两者有什么区别。

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

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

这两个函数是同时调用的吗?我知道,当整个 HTML 页面被浏览器呈现时,document.ready 将被触发,但是第二个函数(自调用匿名函数)呢?它是等待浏览器完成渲染页面还是在遇到它时调用它?

5个回答
  • $(document).ready(function(){ ... }); 或短 $(function(){...});

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

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

    这只不过是一个函数,它会在浏览器解释您的ecma-/javascript. 因此,您在DOM elements这里成功采取行动的可能性很小

@NimChimpsky 我很困惑 (function(){}); 用 $(function(){})。你是错误的反面;)
2021-03-19 21:44:30
我很困惑,关于(function(){ ... })();没有任何 JS 代码尽快运行吗?如果你说,alert()在SIAF内部或外部,效果是不是一样?
2021-03-19 21:44:30
@skube 是的,任何 JS 代码都会在解析器读取它时立即运行,但是您可能会混淆 SIAF 前面是否有“$”。如果是这样,并且该站点使用的是 jQuery,那么这是 jQuery document.ready 辅助函数的缩写形式,一旦 DOM 可用,它将安排给定的函数执行。辅助函数本身将在读取后立即运行,但您为其提供的函数不会。
2021-03-21 21:44:30

(function(){...})(); 将在 Javascript 中遇到时立即执行。

$(document).ready()将在加载文档后执行。 $(function(){...});是一个快捷方式,$(document).ready()并且做完全相同的事情。

当 DOM(文档对象模型)准备好执行 JavaScript 代码时,将执行以下代码。

$(document).ready(function(){
  // Write code here
}); 

上面代码的简写是:

$(function(){
  // write code here
});

下面显示的代码是一个自调用匿名 JavaScript 函数,浏览器解释后会立即执行:

(function(){
  //write code here
})();   // It is the parenthesis here that call the function.

下面显示的 jQuery 自调用函数将全局 jQuery 对象作为参数传递给function($). 这使得$可以在自调用函数中本地使用,而无需遍历定义的全局范围。jQuery 不是唯一使用 的库$,因此这减少了潜在的命名冲突。

(function($){
  //some code
})(jQuery);
对 javascript 闭包的非常简单、清晰和简洁的解释。
2021-03-29 21:44:30
  1. $(document).ready(function() { ... });简单地将该函数绑定到ready文档事件,因此,正如您所说,当文档加载时,事件会触发。

  2. (function($) { ... })(jQuery);实际上是 Javascript 的一种构造,这段代码所做的就是将jQuery对象function($)作为参数传入并运行该函数,因此在该函数中,$始终引用该jQuery对象。这可以帮助解决命名空间冲突等。

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

document.ready 在“构造”DOM 后运行。自调用函数立即运行 - 如果插入到<head>,则在构造 DOM 之前。

+1 以反击不必要的反对票。但是,您的回答有一个小问题。自调用函数会在解析时找到的任何地方执行,并且不一定必须在 内部<head>,并且在构建初始DOM后规则没有什么不同。
2021-03-12 21:44:30