cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Bagaimana untuk mentafsir argumen parameter ketiga jQuery setiap kaedah?

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?

Kod sumber

// 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

Saya dapati ada yang bertanya soalan ini sebelum segmentfault, tetapi malangnya tiada yang memberi jawapan

/q/10...

大家讲道理大家讲道理2735 hari yang lalu1156

membalas semua(1)saya akan balas

  • 巴扎黑

    巴扎黑2017-07-05 10:55:30

    Terima kasih semua, masalah selesai, saya tahu kenapa

    balas
    0
  • Batalbalas