jQueryの「各」関数を使用する場合、呼び出された関数に引数を渡す方法はありますか?
something.each(build);
function build(vars) {
}
簡単に次のことができることは知っていますが、引数を直接渡す方法があるかどうか疑問に思っていました。
something.each(function() {
build(vars);
);
jQueryの「各」関数を使用する場合、呼び出された関数に引数を渡す方法はありますか?
something.each(build);
function build(vars) {
}
簡単に次のことができることは知っていますが、引数を直接渡す方法があるかどうか疑問に思っていました。
something.each(function() {
build(vars);
);
クロージャーを使用して上記を実現できます。.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 とどのように異なるかに注意してください。関数が保存された変数を参照し、それをテキストに追加する方法を見てください
詳細については、クロージャの MDN ページを参照してください https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures