javascript - Comment interpréter les arguments du troisième paramètre de chaque méthode jQuery?
大家讲道理
大家讲道理 2017-07-05 10:53:30
0
1
1152

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

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

répondre à tous(1)
巴扎黑

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal