代码示例:
$JK("body *").each(function() { ... });
JQuery是否会填充元素'数组首先在调用each()
之前或者有点LINQ
- 样式优化,以便在DOM树遍历期间调用function
?我想这个优化可能(或不)部署到JS引擎中。如果是这样,人们如何知道它是为这个还是那个引擎/浏览器实现的?
答案 0 :(得分:2)
它首先构建整个列表。我无法想象它是如何在浏览器/ JavaScript引擎中完成的,尽管我猜测可能会使NodeList以某种方式变得懒惰。
jQuery对象看起来像一个Array实例(它不是,但它试图看起来像一个),这意味着你可以通过数字索引随机访问元素。让它变得懒惰真的很蠢。
请注意,现代浏览器支持DOM访问功能,这些功能将大量工作推送到浏览器的内部,因此我经常会这样做 - 我怀疑,在选择器的情况下,这实际上只是
document.getElementsByTagName('body')[0].getElementsByTagName('*')
浏览器将完整列表交还给jQuery。这就是为什么我提到使NodeList对象变得懒惰,但我仍然认为考虑到JavaScript的语义会很难。
答案 1 :(得分:1)
它首先填充元素数组。
因为这实际上只是javascript和javascript是单线程的(除了这里没有使用的web worker并且无论如何都无法访问DOM),它会发生如下:
此函数调用执行完毕:
$JK("body *")
该函数使用
返回一个jQuery对象.each()
调用方法。在该方法中,它遍历DOM元素数组并为每个DOM元素调用一次回调函数。