jQuery each() - 它是如何在内部工作的?

net*_*ica 5 javascript jquery

我在这方面咨询了jQuery的来源,但我必须承认这可能超出了我的理解 - 或者我正在寻找错误的地方. https://github.com/jquery/jquery/blob/master/src/core.js

在第222行附近有一个看起来递归的函数,然后在第566行附近还有另一个在.extend()命名空间中声明的函数.

我只是好奇 - 这究竟是如何工作的?例如,当我打电话时:

$('.item').each(function(){
    // Do Something
});
Run Code Online (Sandbox Code Playgroud)

如何循环遍历DOM元素数组,何时停止,它如何应用该函数?它不能做

$('.item').doThis()
Run Code Online (Sandbox Code Playgroud)

因为doThis()可能不是该对象的成员.

请赐教:)谢谢.

Ber*_*rgi 2

不,它不是递归的。第 222 行的函数是 jQuery 原型 ( $.fn) 上的函数,而它调用的函数是- 一个在第 566 行jQuery.each定义的静态属性。注意如何工作:如果没有给出要扩展的对象,它将使用. 它既应用于代码的不同部分,也应用于代码的不同部分。extendthisjQueryjQuery.fn

那么这到底是如何工作的呢?

$obj.each(callback)正在调用该$.fn.each方法,该方法适用$.each于 jQuery 实例(DOM 包装器)本身:第 223 行

现在,在 中$.each,有四种情况:有或没有提供的args数组,以及在类似数组的结构或其他对象上。您没有传递额外的参数,并且 jQuery 实例有一个length属性并且在数字索引中具有 DOM 元素,因此将执行第 596 行中的循环。所以你的电话相当于

for (var i=0, len=$obj.length; i<len; i++)
    if ( callback.call($obj[i], i, $obj[i]) === false ) break;
Run Code Online (Sandbox Code Playgroud)