Heim > Fragen und Antworten > Hauptteil
Als ich frei war, habe ich mir den JQ-Quellcode angesehen und festgestellt, dass
each
方法、map
方法、makeArray
nur für den internen Gebrauch bestimmt ist (// arg ist nur für den internen Gebrauch bestimmt, konnte aber nicht einmal die Antwort finden). Die API von jquery hat nur angegeben. Ist die Erklärung der ersten beiden Parameter nur zum Debuggen gedacht? Wie benutzt man es?
// args is for internal usage only
each: function( obj, callback, args ) {
var value,
i = 0,
length = obj.length,
isArray = isArraylike( obj );
if ( args ) {
if ( isArray ) {
for ( ; i < length; i++ ) {
value = callback.apply( obj[ i ], args );
if ( value === false ) {
break;
}
}
} else {
for ( i in obj ) {
value = callback.apply( obj[ i ], args );
if ( value === false ) {
break;
}
}
}
// A special, fast, case for the most common use of each
} else {
if ( isArray ) {
for ( ; i < length; i++ ) {
value = callback.call( obj[ i ], i, obj[ i ] );
if ( value === false ) {
break;
}
}
} else {
for ( i in obj ) {
value = callback.call( obj[ i ], i, obj[ i ] );
if ( value === false ) {
break;
}
}
}
}
return obj;
}
Nach vielen Tests habe ich festgestellt, dass es Einschränkungen für den dritten Parameter gibt: Zahlen, Zeichenfolgen, JSON usw.; ich habe die anderen Typen nicht einzeln getestet In einem Array muss der Rückruf so viele Parameter wie die Länge des Args-Arrays verwenden, um die Werte im Args-Array einzeln zu empfangen, wenn das Array drei Werte enthält und der Rückruf hat nur ein formaler Parameter, dann kann dieser formale Parameter nur den Wert von args[0] empfangen. Und wir können Argumente verwenden, um alle übergebenen Werte in args (alle der Reihe nach übergeben) auszugeben, einen der Testcodes: 只能传数组
// 首先each我传入了三个参数
// 通过这种方式,我取到了a,b,c 的三个值分别为'wo', 'ai', 'ni'
// 多次尝试,我发现args传过来的三个参数是按照顺序排列好的,
// 如果只有一个参数那么,我们就只能取到'wo',
// 当
var arr = [5, 7, 5];
$.each(
arr,
function(a, b, c){
console.log(a); // 'wo'
console.log(b); // 'ai'
console.log(c); // 'ni'
console.log(arguments); //["wo", "ai", "ni", callee: function, Symbol(Symbol.iterator): function]
console.log(this) // 回调中的所有参数会根据each第一个参数的长度进行多次打印,所以每次打印的this都指向每一次的arr的值
},
['wo', 'ai', 'ni']
)