10

jQueryの「各」関数を使用する場合、呼び出された関数に引数を渡す方法はありますか?

something.each(build);

function build(vars) {

}

簡単に次のことができることは知っていますが、引数を直接渡す方法があるかどうか疑問に思っていました。

something.each(function() {
    build(vars);
);
4

1 に答える 1

24

クロージャーを使用して上記を実現できます。.each関数は、引数として、インデックスと要素の 2 つの引数を持つ関数を受け取ります

これら 2 つの引数を受け取る関数を返す関数を呼び出し、そこに変数を格納できます。この変数は、JavaScript のスコープ動作により、返された関数の実行時に参照されます。

次に例を示します。

// closureFn returns a function object that .each will call for every object
someCollection.each(closureFn(someVariable));

function closureFn(s){
    var storedVariable = s; // <-- storing the variable here

    return function(index, element){ // This function gets called by the jQuery 
                                     // .each() function and can still access storedVariable

        console.log(storedVariable); // <-- referencing it here
    }
}

JavaScript スコープの仕組みにより、storedVariable は返された関数によって参照可能になります。これを使用して変数を保存し、任意のコールバックでアクセスできます。

私はまた、その点を証明するjsFiddleを持っています。ページ上のテキスト出力が、HTML ペインで定義された HTML とどのように異なるかに注意してください。関数が保存された変数を参照し、それをテキストに追加する方法を見てください

http://jsfiddle.net/QDHEN/2/

詳細については、クロージャの MDN ページを参照してください https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures

于 2014-04-29T06:38:09.433 に答える