Quand j'étais libre, j'ai regardé le code source de jq et j'ai découvert que
each
方法、map
方法、makeArray
indiquait : uniquement pour un usage interne (// arg est destiné à un usage interne uniquement). J'ai vérifié beaucoup d'informations mais je n'ai même pas trouvé la réponse. L'API de jquery n'a donné que l'explication des deux premiers paramètres uniquement pour le débogage ? Comment l'utiliser?
// 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;
}
Après de nombreux tests, j'ai découvert qu'il existe des restrictions sur le troisième paramètre. Les types qui ne peuvent pas être transmis sont : les nombres, les chaînes, json, etc. 只能传数组
Je n'ai pas testé les autres types un par un. dans un tableau, le rappel doit utiliser autant de paramètres que la longueur du tableau args pour recevoir les valeurs du tableau args une par une s'il y a trois valeurs dans le tableau et que le rappel a. un seul paramètre formel, alors ce paramètre formel ne peut recevoir que la valeur de args[0]. Et on peut utiliser des arguments pour imprimer toutes les valeurs passées dans args (toutes passées dans l'ordre), un des codes de test :
// 首先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']
)
Référence/q/10...
Merci à tous, le problème est résolu, je sais pourquoi