Maison  >  Questions et réponses  >  le corps du texte

javascript - Comment interpréter les arguments du troisième paramètre de chaque méthode jQuery?

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?

Code source

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

J'ai découvert que quelqu'un avait posé cette question avant segmentfault, mais malheureusement personne n'a donné de réponse

/q/10...

大家讲道理大家讲道理2662 Il y a quelques jours1098

répondre à tous(1)je répondrai

  • 巴扎黑

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

    Merci à tous, le problème est résolu, je sais pourquoi

    répondre
    0
  • Annulerrépondre