jquery – $(document).ready是否必要?

我正在阅读一个在线教程,该教程说明是否在之上, $(document).ready是不必要的b / c文件已经被加载。

Q1>这是真的吗?

Q2>

    $(window).scroll(function() { // this line will track all mouse scroll event });  

$(窗口)是什么意思? 这是一个jquery选择器吗? 如果是,那么之前的声明看起来是正确的,因为我们不必将其包括在内

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

Q3>为什么我们在这里使用$ link? 为什么我们选择使用$link而不是var link?

  $(window).scroll(function() { $link = $('nav a[hash=#first]'); $link.addClass('selected'); });  

谢谢

Q1。 是的,不是。 也许jQuery在到达之后仍然会做一些事情,但是如果你只是想找到一个先前在主体中加载的元素它将会起作用。

Q2。 它创建一个指向窗口的jQuery对象。 它不是jQuery Selector,也不是$(document)或$(document.body) – 在这些中你将节点传递给jQuery而不是Selector。

Q3。 它缓存它。 通过执行$link = $('nav a[hash=#first]'); 我们将结果缓存/分配给$ link,好像我们两次执行$('nav a[hash=#first]') ,然后jQuery必须两次找到该结果 – 如果你所有的话,这可能变得非常密集呼叫没有缓存。 你也应该使用var $link = $('nav a[hash=#first]'); ,以确保$link不是全局定义的 – 因为这是不好的(由于可变冲突)。

作为一般做法; 任何使用DOM元素的东西应该在文档准备好之后(以确保它们已经加载并且jQuery已经准备好使用它们),任何不应该的东西(因为不需要等待)。

那不对。 如果它是在身体之后是正确的。 您可以查看更多信息和方法http://encosia.com/2010/08/18/dont-let-jquerys-document-ready-slow-you-down/

Q1排序真实。 详细信息在api doc中 :

虽然JavaScript在呈现页面时提供了用于执行代码的加载事件,但在完全接收到所有资产(如图像)之前,不会触发此事件。 …当使用依赖于CSS样式属性值的脚本时,在引用脚本之前引用外部样式表或嵌入样式元素很重要。

在关闭正文标记之前(或之后)插入代码而不使用.ready()通常可以正常工作,因为当浏览器的解析器到达正文末尾时,dom足够完整,您可以开始使用选择器,等等

Q2 “窗口”是浏览器公开的对象 ; 它是DOM的一部分,但不需要以.ready(function(){})样式引用它,因为正在加载的HTML不会以任何方式更改该对象以影响其.scroll事件。