gpt4 book ai didi

javascript - Select2 each2 方法 - 它是如何工作的?

转载 作者:数据小太阳 更新时间:2023-10-29 05:12:26 27 4
gpt4 key购买 nike

我正在查看 Select2 ( source code ) 并找到了 each2 方法原型(prototype):

$.extend($.fn, {
each2 : function (c) {
var j = $([0]), i = -1, l = this.length;
while (
++i < l
&& (j.context = j[0] = this[i])
&& c.call(j[0], i, j) !== false //"this"=DOM, i=index, j=jQuery object
);
return this;
}
});

我的问题是 - 这种方法是如何工作的?我的意思是 - 为什么 while 循环只有条件,没有语句部分?我真的很想了解此方法的流程。

最佳答案

当您将表达式置于条件中时(例如:if (i)if (i == null)if (++i)if (i < 2))),表达式在其“检查”之前得到评估,即 truefalse .

实例:

我们有var i = 0 ;现在你调用if (++i) console.log(i) .表达式 ++i返回 1 (在 javascript [0 is not] 中被理解为truth)所以console.log(i)日志 1 .

现在假设我们有 var i = 0if (++i && ++i) console.log(i) .第一个表达式返回 1所以第二个也被称为返回2 .两者 12被视为真相 所以console.log(i)日志 2

太棒了。让我们看一下与上面相同的示例,但在 if 之前我们初始化 var i = -1.现在我们调用if (++i && ++i) console.log(i) .第一个++i返回 0这是虚假

要继续,您必须了解如何 &&作品。让我快速解释一下:如果你堆叠 exp1 && exp2 && exp3 ... && expX然后 exp2将仅在 exp1 时执行(评估)返回 truth(例如:true1"some string")。 exp3只有在 exp2 时才会执行是真实的exp4什么时候exp3是真理等等...(直到我们达到 expN )

让我们回到f (++i && ++i) console.log(i)现在。所以第一个++i返回 0这是所以第二个++i未执行且完整 conditionfalse所以console.log(i)不会被执行(递增是如何完成的,所以 i 现在等于 0)。

现在当你得到它时我可以告诉你 while循环在 condition 中工作相同检查方式。例如var = -2while (++i)将执行到 ++i返回 falsity (即 0 )。 while (++1)将恰好执行 2 次。

长话短说,下面是博士!!!

那么这是如何运作的呢?

   while (
++i < l
&& (j.context = j[0] = this[i])
&& c.call(j[0], i, j) !== false
);

我认为最好的解释方式是重写它(:

   while ( ++i < l ) {
if (!(j.context = j[0] = this[i])) break;
if (!(c.call(j[0], i, j) !== false)) break;
}

或者更不神奇:

   var i = 0;
while ( i < l ) {
if (!(j.context = j[0] = this[i])) break;
if (!(c.call(j[0], i, j) !== false)) break;
i++;
}

关于javascript - Select2 each2 方法 - 它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26513683/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com