代码示例:

$JK("body *").each(function() { ... });

在调用each()之前JQuery是否会首先填充元素的数组,或者有一些LINQ风格的优化,那么在DOM树遍历期间会调用该function吗? 我想这个优化可能(或不)部署到JS引擎中。 如果是这样,如何知道它是针对此引擎/浏览器实现的?

===============>>#1 票数:2 已采纳

它首先构建整个列表。 我无法想象它是如何在浏览器/ JavaScript引擎中完成的,尽管我有可能使NodeList以某种方式变得懒惰。

jQuery对象看起来像一个Array实例(不是,但是它试图看起来像一个),这意味着您可以通过数字索引随机访问元素。 使其变得懒惰是一个绝招。

请注意,现代浏览器支持DOM访问功能,这些功能将大量工作推送到浏览器的内部,因此,我怀疑,在选择器的情况下,这通常只是

document.getElementsByTagName('body')[0].getElementsByTagName('*')

浏览器将完整列表交还给jQuery。 这就是为什么我提到使NodeList对象变得懒惰,但是考虑到JavaScript的语义,我仍然认为这很难。

===============>>#2 票数:1

它首先填充元素数组。

由于这实际上只是javascript,而javascript是单线程的(除了未在此处使用并且始终无法访问DOM的Web worker之外),它的发生方式如下:

执行此函数调用以完成:

$JK("body *")

该函数返回一个jQuery对象

.each()

方法被调用。 在该方法中,它遍历DOM元素数组并为每个DOM元素调用一次回调函数。

  ask by BreakPhreak translate from so

未解决问题?本站智能推荐:

关注微信公众号