suchen

Heim  >  Fragen und Antworten  >  Hauptteil

javascript - Wie interpretiere ich die dritten Parameterargumente jeder jQuery-Methode?

Als ich frei war, habe ich mir den JQ-Quellcode angesehen und festgestellt, dass each方法、map方法、makeArray nur für den internen Gebrauch bestimmt ist (// arg ist nur für den internen Gebrauch bestimmt, konnte aber nicht einmal die Antwort finden). Die API von jquery hat nur angegeben. Ist die Erklärung der ersten beiden Parameter nur zum Debuggen gedacht? Wie benutzt man es?

Quellcode

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

Nach vielen Tests habe ich festgestellt, dass es Einschränkungen für den dritten Parameter gibt: Zahlen, Zeichenfolgen, JSON usw.; ich habe die anderen Typen nicht einzeln getestet In einem Array muss der Rückruf so viele Parameter wie die Länge des Args-Arrays verwenden, um die Werte im Args-Array einzeln zu empfangen, wenn das Array drei Werte enthält und der Rückruf hat nur ein formaler Parameter, dann kann dieser formale Parameter nur den Wert von args[0] empfangen. Und wir können Argumente verwenden, um alle übergebenen Werte in args (alle der Reihe nach übergeben) auszugeben, einen der Testcodes: 只能传数组

// 首先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']
)

Referenz

Ich habe herausgefunden, dass jemand diese Frage vor segmentfault gestellt hat, aber leider hat niemand eine Antwort gegeben

/q/10...

大家讲道理大家讲道理2735 Tage vor1161

Antworte allen(1)Ich werde antworten

  • 巴扎黑

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

    谢谢大家,问题解决了,我知道为什么了

    Antwort
    0
  • StornierenAntwort