Apabila saya bebas, saya melihat kod sumber jq dan mendapati bahawa
each
方法、map
方法、makeArray
menyatakan: hanya untuk kegunaan dalaman (// arg adalah untuk kegunaan dalaman sahaja saya menyemak banyak maklumat tetapi tidak menemui jawapannya api jquery hanya memberi Adakah penjelasan dua parameter pertama hanya untuk debugging? Bagaimana untuk menggunakannya?
// 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;
}
Selepas banyak ujian, saya mendapati terdapat sekatan pada parameter ketiga Jenis yang tidak boleh dilalui ialah: nombor, rentetan, json, dan lain-lain 只能传数组
; dalam tatasusunan, Panggilan balik mesti menggunakan seberapa banyak parameter sebagai panjang tatasusunan args untuk menerima nilai dalam tatasusunan args satu demi satu Jika terdapat tiga nilai dalam tatasusunan dan panggilan balik mempunyai hanya satu parameter formal, maka parameter formal ini hanya boleh menerima nilai args[0]. Dan kita boleh menggunakan argumen untuk mencetak semua nilai yang diluluskan dalam args (semua diluluskan mengikut tertib), salah satu kod ujian:
// 首先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']
)
Rujukan/q/10...
Terima kasih semua, masalah selesai, saya tahu kenapa